将带有数千个收件人的Outlook MSG导入PST

时间:2013-03-22 00:27:15

标签: c# com outlook outlook-2010 outlook-redemption

我有许多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保存为其他格式?

2 个答案:

答案 0 :(得分:0)

0x8004011B是MAPI_E_CORRUPT_DATA。看起来你有一个损坏的PST商店。您是否尝试使用scanpst.exe进行修复?

答案 1 :(得分:0)

Dmitry建议我将MSG文件视为OLE存储文件。这个想法让我进入了这个网站:用C#CodeProject读取Outlook MSG文件。

我已确认该项目能够打开包含大量收件人的MSG。我用一个拥有2,499名接收者的味精测试了它。

该项目可以提取构建MHT文件所需的数据。