如何将Outlook MailItem对象转换为字节[]

本文关键字:字节 转换 对象 Outlook MailItem | 更新日期: 2023-09-27 18:09:29

关于这个有几个Stackoverflow问题,但是没有一个真正提供一个解决方案。

场景-我正在VS2013中创建Outlook插件。用户选择邮件,点击"我的插件"按钮,这些邮件就会被发送到一个网络服务,存储在一个数据库中,并链接到一个客户端。任何人在任何位置都可以打开邮件查看。

目前我正在使用MailItem.SaveAs(filePath)函数,然后使用File.ReadAllBytes(filePath)创建一个可以发送到web服务的字节数组。

创建字节后立即删除文件[]:

for (int x = 0; x < Emails.Count; x++)
{
    //TODO: RMc - is there a better way than saving to disk? unable to convert MailItem directly to stream...!
    Guid g = Guid.NewGuid();
    string filePath = "c:''temp''" + g.ToString() + ".msg";
    Emails.ElementAt(x).SaveAs(filePath);
    byte[] by = File.ReadAllBytes(filePath);
    File.Delete(filePath);//no longer needed now we have byte array
    //this is where I create a list of objects with all required data to send to web service
}

将文件写入磁盘很慢——它会创建一个*。MSG文件,如果没有人想要查看它,可能永远不会真正使用它。所以我想能够保存MailItem对象直接到一个字节数组-然后我可以保存到数据库,只创建*。MSG文件,如果用户需要的话。

MailItem对象似乎是动态的,所以我认为这是问题所在。

谁能提供一个解决方案或替代方法来实现我所描述的?

如何将Outlook MailItem对象转换为字节[]

Outlook对象模型和扩展MAPI中的消息是不可流的。您可以以特定格式保存消息,但它不会是一个精确的副本。MSG格式将是您可以获得的最接近的格式。

使用MailItem.SaveAs(..., olMsg)将消息保存为MSG文件