簡體   English   中英

使用 Debian/Docker 運行應用程序時將 MimeMessage 寫入 MemoryStream 長度/編碼問題

[英]Writing MimeMessage to MemoryStream length/encoding issues when running application with Debian/Docker

我在 .net Core web 應用程序(基於 Boilerplate / ASP.NET Zero)中遇到了問題,我們在其中實施了 MailKit 和 MimeKit。 我們正在通過 IMAP 下載 MimeMessages,並將它們保存為數據庫中的 byte[] in.eml 格式。

雖然在 Visual Studio 的調試器中一切正常,但在 Debian/Docker 環境中發布的應用程序在 stream 長度方面表現不同——stream 稍短一些。 結果,稍后從我們的數據庫下載.eml 文件時,Outlook 無法解碼該文件,例如:

Outlook 中的解碼問題

相關代碼如下:

mimeMessage = await folder.GetMessageAsync(new MailKit.UniqueId(input.EMailDto.IMAPUId));
using (var memory = new MemoryStream())
{
    mimeMessage.WriteTo(memory);
    dataRow.byteArray = memory.ToArray();
}

當我在 VS 調試器中查看 memory.Length 時,它是例如 547.585(Outlook 沒有問題),而使用 Docker 運行時,它的長度(我在同一位置輸入了一些日志記錄以讀取它)僅為 540.341,問題開始了...

從數據庫讀取/下載在兩種環境中都很好,通過 VS 調試器保存的 email 在通過 Debian/Docker 環境下載時也完好無損。

非常感謝任何想法和提示!

編輯:我用十六進制編輯器做了一些比較,它是 0D0A 與 0D 導致的問題。 仍然不確定如何正確解決這個問題..?

經過一些測試,我可以確認解決方案:

var options = FormatOptions.Default.Clone();
options.NewLineFormat = NewLineFormat.Dos;
using (var memory = new MemoryStream())
{
   message.WriteTo(options, memory);
   [...]
}

再次感謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM