我有一个C#应用程序,读取.msg文件并提取正文和附件。但是,当我尝试加载.eml文件时,应用程序崩溃。
MailItem mailItem = (MailItem)outlookApp.CreateItemFromTemplate(msgFileName);
mailItem.SaveAs(fullFilename, OlSaveAsType.olHTML); // save body in html format
for(int i = 0; i < mailItem.Attachments.Count; i++)
mailItem.Attachments[i].SaveAsFile(filename); // save attachments
这适用于.msg文件,但不适用于.eml文件。我不明白为什么.eml文件不工作,因为我可以在Outlook 2010中打开.eml文件。
如何使用Outlook Primary Interop Assembly加载.eml文件?
5条答案
按热度按时间wlsrxk511#
尝试以下示例代码Easily Retrieve Email Information from .EML Files
exdqitrt2#
CreateItemFromTemplate
只适用于MSG/OFT文件。对于EML文件,您需要在代码中显式解析该文件或使用第三方库(如Redemption - I am its author):以下代码将创建一个MSG文件,并使用Redemption(RDOSession对象)将一个EML文件导入其中:
然后,您可以使用邮件(RDOMail)访问它的各种属性(主题、正文等)
ulydmbyx3#
为了从.eml文件创建MailItem,您可以使用以下两个步骤:首先打开一个Outlook进程示例,然后使用Outlook API创建MailItem。
70gysomp4#
虽然Outlook可以打开EML文件,有没有办法做到这一点编程只与VBA。所以我创建了这个VBA宏循环通过一些文件夹,并打开每个EML文件使用***SHELL EXEC***。它可能需要几毫秒,直到Outlook打开EML文件,所以VBA等待,直到在ActiveInspector中打开的东西。最后,这封电子邮件被复制到一些选定的文件夹,并且(在成功的情况下)删除原始EML文件。
在这里查看我的完整答案(和代码):https://stackoverflow.com/a/33761441/3606250
l3zydbqr5#
假设已安装outlook...
仅对于msg文件,当outlook正在运行/已打开时,您可以使用OpenSharedItem
对于eml文件或msg文件(Outlook将打开并弹出):