有一些Stackoverflow问题,但没有一个真正提供解决方案。
场景 - 我在VS2013中创建了一个Outlook AddIn。用户选择电子邮件,点击我的AddIn按钮,然后将电子邮件发送到Web服务以存储在数据库中并链接到客户端。任何地方的任何人都可以打开电子邮件进行查看。
目前我正在使用MailItem.SaveAs(filePath)
函数,然后使用File.ReadAllBytes(filePath)
创建一个可以发送到Web服务的字节数组。
我创建byte []时删除文件:
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对象由动态显示,因此我认为这是问题所在。
任何人都可以提供解决方案或替代方法来实现我所描述的内容吗?
答案 0 :(得分:0)
Outlook对象模型和扩展MAPI中的邮件不可流式传输。您可以以特定格式保存邮件,但它不是精确副本。 MSG格式将是您可以获得的最接近的格式。
使用MailItem.SaveAs(..., olMsg)
将邮件另存为MSG文件。