将.MSG文件转换为.TXT;我应该使用Microsoft.Interop Outlook吗?

问题描述:

我正在尝试将.msg文件转换为.txt文件。我有两个问题。将.MSG文件转换为.TXT;我应该使用Microsoft.Interop Outlook吗?

1)我一直在调查并找到Microsoft.Interop Outlook包,并且有一种方法可以将bodyHTML,To,Sent Date和其他一些属性提取出来,但我觉得这是一个非常非常手动过程,因为我要修剪出所有的html标签,如< BR>,& NBSP,A HREF等等

这里是我当前的代码...

MailItem mailItem = outlookApp.Session.OpenSharedItem(item) as MailItem; 
TextFile textFile = new TextFile(); //collection of properties I am interested in 
textFile.To = mailItem.To; 
textFile.Subject = mailItem.Subject; 
textFile.Sent = mailItem.SentOn.ToString(); 
textFile.Name = Path.GetFileNameWithoutExtension(item); 
var atttach = mailItem.Attachments; //Really just want the names 
textFile.Body = RemoveStuff(mailItem.HTMLBody); //manually removing all html tags 
textFiles.Add(textFile); 
Marshal.ReleaseComObject(mailItem); 

有谁知道有没有一种更有效的方式来做到这一点在C#或使用Interop我不知道的方式?

2)如果我去互操作路线,有没有办法绕过Outlook中的弹出窗口询问我是否允许访问Outlook?如果我的目标是创建一个转换器,似乎效率低下。

任何帮助,非常感谢。

谢谢!

首先,你为什么要使用HTMLBody属性而不是纯文本Body?

其次,您可以使用MailItem.saveAs(...,olTxt)将邮件保存为文本文件。或者你的意思是由txt文件的其他内容?

如果您的防病毒应用程序不是最新的,则由Outlook引发安全提示。如果你无法控制代码运行的环境,那么扩展MAPi(仅限于C++或Delphi)或像Redemption(任何语言)的包装几乎都是你唯一的选择。有关更多详细信息,请参阅http://www.outlookcode.com/article.aspx?id=52

Redemption,你可以像下面这样:

using Redemption; 
... 
RDOSession session = new RDOSession(); 
RDOMail msg = session.GetMessageFromMsgFile(TheFileName); 
msg.SaveAs(TxtFileName, rdoSaveAsType.olTXT); 
+0

哇太感谢你了,这正是我需要做的,这是将其保存为文本。 (我不知道saveAs,这就是为什么我使用HTMLBody并手动解析所有的html标签和实体)。现在唯一的事情是它不捕获mailItem.To属性。我听说过Redemption,但由于授权而无法使用它。再次感谢!!! – bird

+0

你是说txt格式不保存To/CC头?或者电子邮件地址不包括在内? –

+0

两者,如果我输入mailItem.To它为空,但在我的.MSG中显然是收件人。由于其为空,因此没有任何内容保存到文本文件中。 – bird