【问题标题】:Create .eml file without saving EmailMessage to a mailbox first创建 .eml 文件而不先将 EmailMessage 保存到邮箱
【发布时间】:2014-04-18 23:06:29
【问题描述】:

我的目标是获取消息参数(发件人、收件人、正文、主题等)并创建一个 .eml 文件。

我目前正在使用 EWS 托管 API(尽管我愿意接受其他建议)来创建 EmailMessage 对象。我不想将消息保存到邮箱或发送它(这是不可能的,因为我正在使用的应用程序帐户由于安全策略而无权访问任何邮箱),我想创建一个 .eml 文件。

我改编了从另一个看起来很有希望的答案中找到的一些代码:

EmailMessage message = new EmailMessage(service);

//message initialization code
//...

using (FileStream fs = File.Open(@"message.eml", FileMode.Create, FileAccess.Write))  
{
    message.Load(new PropertySet(ItemSchema.MimeContent));
    var mc = message.MimeContent;
    fs.Write(mc.Content, 0, mc.Content.Length);
}

但我在 message.Load() 上遇到异常,提示“无法执行此操作,因为此服务对象没有 Id。”通过一点调试,我基本上看到 message.Id 为空。 Id 没有设置器。我相信这是因为消息在保存到文件夹之前不会获得 ID,而我无法做到这一点。

有什么办法可以解决这个问题吗?

谢谢

【问题讨论】:

    标签: c# exchangewebservices eml


    【解决方案1】:

    EmailMessage 类没有 MIME 解析器/编写器。 MimeContent 由服务器创建。解决方法是创建自己的解析器来解析在 EmailMessage 对象上设置的属性。如果您不保存到服务器,为什么要使用 EmailMessage 类?

    【讨论】:

    • 我使用了 EmailMessage 类,因为我认为它具有生成 MimeContent 并保存到 eml 文件的方法(Load 方法)。有没有办法利用服务器生成 MimeContent 的任何逻辑而不保存到它?如果没有,是否有关于如何正确格式化 eml 文件的指南/文档? (我的理解不一定)谢谢
    • 我的理解是 .eml 格式基于 RFC822 (rfc-editor.org/rfc/rfc822.txt) 或其后续 RFC 之一。您可以尝试查看是否有人向 .eml 解析器制作了 EmailMessage,或者您可以检查 .eml 文件(它是纯文本),以便您可以创建自己的解析器。
    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2011-07-28
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多