繁体   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