我有许多Outlook MSG需要保存到其他格式,例如MHT。 MSG每个都有成千上万的收件人,我知道MSG结构不够健壮,无法处理大量的收件人。我相信我的第一步是将MSG导入PST,它可以处理大量的收件人。
我正在使用Outlook 2010和Redemption 5.4(完整版)。我准备使用Outlook对象模型或Redemption来实现我的目标。平台:Windows 7 SP1,64位。
我尝试过这些方法:
//Establish Session
RDOSession rdoSession = new RDOSession();
rdoSession.Logon(null, null, false, true, null, true);
//Create empty mail item in PST.
RDOMail rdoMail = rdoSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox).Items.Add(null);
//Merge MSG into new, empty mail
//fi.FullName = C:\<subdirectories>\009.msg
rdoMail.Import(fi.FullName, rdoSaveAsType.olMSGUnicode);
rdoMail.Save();
//Save as MHT
rdoMail.SaveAs(diMht.FullName + @"\" + strNormalizedSubject + ".mht", Redemption.rdoSaveAsType.olMHTML);
此代码无法将MSG导入PST。我收到这个例外:
{"Error importing: 0x8004011B"}
我也尝试过这种不依赖PST的方法。
RDOMail rdoMail = rdoSession.GetMessageFromMsgFile(fi.FullName, false);
string strNormalizedSubject = NormalizeSubject(rdoMail.Subject);
rdoMail.SaveAs(diMht.FullName + @"\" + strNormalizedSubject + ".mht", Redemption.rdoSaveAsType.olMHTML);
此代码导致此异常:Error in OpenIMsgOnIStg: MAPI_E_CORRUPT_DATA
。
我相信Transend Migrator可以转换大号或收件人的MSG。但是,由于许可成本很高,这不是一种选择。
如何将MSG保存为其他格式?
答案 0 :(得分:0)
0x8004011B是MAPI_E_CORRUPT_DATA。看起来你有一个损坏的PST商店。您是否尝试使用scanpst.exe进行修复?
答案 1 :(得分:0)
Dmitry建议我将MSG文件视为OLE存储文件。这个想法让我进入了这个网站:用C#CodeProject读取Outlook MSG文件。
我已确认该项目能够打开包含大量收件人的MSG。我用一个拥有2,499名接收者的味精测试了它。
该项目可以提取构建MHT文件所需的数据。