【发布时间】:2015-12-15 17:20:14
【问题描述】:
我已经构建了一个交换代理来将某些电子邮件保存到磁盘。
我可以在 Outlook 中打开写入磁盘的 .eml 文件,唯一的问题是电子邮件的正文丢失,当我在 Outlook 中对保存到的电子邮件执行“鼠标右键 - 查看源代码”时也是如此磁盘我得到一个空结果(主题和附件仍然存在)。收到正文后,正文仍然存在于 Outlook 中(将电子邮件发送给自己并在 Outlook 中打开收到的邮件时)。
我使用了以下代码:
public void Write(Stream from, Stream to)
{
for (int a = from.ReadByte(); a != -1; a = from.ReadByte())
to.WriteByte((byte)a);
}
private void HandleMailItem(MailItem mailItem)
{
try
{
using (var ms = mailItem.GetMimeReadStream())
{
using (var fs = new FileStream(@"c:\temp\email.eml", FileMode.Create))
{
Write(ms,fs);
}
}
}
}
除了 mailtem.GetMimeReadStream() 我还尝试了 mailItem.Message.MimeDocument.Write 但结果相同(缺少电子邮件正文)
private void WriteEmlFile(MailItem mailItem, string emailFilePath)
{
_logger.Info("writing file {0}", emailFilePath);
using (var ms = new MemoryStream())
{
mailItem.Message.MimeDocument.WriteTo(ms);
var byteArray = ms.ToArray();
EncryptionHelper.Encrypt(byteArray, emailFilePath);
}
}
【问题讨论】:
-
那么好和坏(由您的代码创建的)EML 文件有什么区别?
-
eml 文件很好,因为它们在 Outlook 中打开很好,没有显示主题和附件的任何错误。问题是在两个代码示例中都缺少电子邮件的正文。
-
所以用记事本打开EML文件就不见了?还是仅在 Outlook 显示时?
-
嗯...当我在记事本中打开电子邮件时,我可以找到原始正文。所以我的问题现在转移到为什么前景没有显示身体。当我将 eml 文件中的 ... (来自记事本++)与鼠标右键的结果进行比较时 - 从 Outlook 中“显示源代码”(使用差异工具)我发现没有差异。我正在使用 Outlook 2010 版本 14.0.7151.5001(64 位)和 Exchange 版本 14.0(内部版本 639.21)。
-
除非您发布完整的 MIME 消息源,否则真的无法猜测。
标签: email exchange-server