【问题标题】:saving MailItem in Exchange Agent to .eml file loses the email body将 Exchange 代理中的 MailItem 保存到 .eml 文件会丢失电子邮件正文
【发布时间】: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


【解决方案1】:

当您创建 eml 文件时,请检查您的 eml 标头属性(contenr-type)。 例如)在 mime 版本下。 内容类型,编码类型..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2012-09-17
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多