将.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);
哇太感谢你了,这正是我需要做的,这是将其保存为文本。 (我不知道saveAs,这就是为什么我使用HTMLBody并手动解析所有的html标签和实体)。现在唯一的事情是它不捕获mailItem.To属性。我听说过Redemption,但由于授权而无法使用它。再次感谢!!! – bird
你是说txt格式不保存To/CC头?或者电子邮件地址不包括在内? –
两者,如果我输入mailItem.To它为空,但在我的.MSG中显然是收件人。由于其为空,因此没有任何内容保存到文本文件中。 – bird