如何在不将其保存到新位置的情况下访问C#中的Outlook电子邮件附件?

时间:2009-10-22 16:45:24

标签: c# outlook attachment outlook-addin

我在C#中使用Microsoft.Office.Interop.Outlook来访问邮箱并查找包含特定文件附件的邮件。我需要与附件进行交互。

目前,我正在将文件保存到新位置并从那里访问它。这种复制过程正在减慢我的速度。理想情况下,我希望从存储在内存中的任何位置访问该文件,但Outlook.Attachment.PathName字段返回null。

邮件存储在Exchange服务器上。

是否可以直接访问它们,还是需要继续保存文件?

2 个答案:

答案 0 :(得分:3)

Outlook.Attachment.PathName表示磁盘位置。附件是一个文件;如果你想与它进行交互,你必须像对待文件一样对待它,这意味着将它保存到本地磁盘。

Outlook.Attachment对象实际上并不包含附件;它包含指向附件的链接,以及一些相关的元数据。

答案 1 :(得分:3)

我不知道它是否可能以任何方式通过Outlook对象模型,但MAPI肯定允许你这样做。

您需要打开邮件MAPIObjectIMessage。从那里使用IMessage::OpenAttach(),返回IAttach 附件大小存储在PR_ATTACH_SIZE中,实际数据存储在PR_ATTACH_DATA_BIN

与往常一样,Redemption可能更容易实现此目的。

修改
通过MAPI进行访问就是Outlook在内部所做的事情 - 应该相当快,至少在使用Exchange缓存模式时。