[英]GZipStream works when writing to FileStream, but not 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 无法解码该文件,例如:
相关代码如下:
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.