2013-03-22 65 views
0

我有一些Outlook MSG需要保存为备用格式,例如MHT。每个MSG都有成千上万的收件人,并且我知道MSG结构不足以处理大量的收件人。我相信我的第一步是将MSG导入可处理大量收件人的PST。将成千上万的收件人导入Outlook中的Outlook MSG

我正在使用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); 

此代码不能味精导入到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可以将MSGs转换为大数字或收件人。但是,由于许可成本高,这不是一个选择。

如何将MSG保存为其他格式?

回答

0

德米特里建议我将MSG文件视为OLE存储文件。这个想法导致我到这个网站:阅读C#中的Outlook MSG文件#CodeProject

我确认该项目能够打开大量收件人的留言。我用一个有2499个收件人的MSG测试了它。

该项目可能使提取构建MHT文件所需的数据成为可能。

0

0x8004011B是MAPI_E_CORRUPT_DATA。看起来你有一个腐败的PST商店。你有没有尝试使用scanpst.exe来修复它?

+0

我相信被报告为腐败的数据是味精。我想导入MSG的PST很好,我可以导入其他MSG而没有问题。 MSG有成千上万的收件人,这使得Outlook无法打开它。我有两个版本的009.msg,一个是使用OutlookSpy创建的,另一个是通过将邮件从PST拖动到我的桌面创建的。两者都表现出相同的行为。 – 2013-03-22 18:04:15

+0

如果您可以重新创建它们,请将它们保存为olMsgUnicode格式而不是olMsg。 – 2013-03-23 21:39:26

+0

尝试使用olMsgUnicode从PST源重新创建MSG导致此OutlookSpy脚本错误:'没有足够的可用内存来运行此程序。退出一个或多个程序,然后重试。“通常,我无法指定源MSG的格式。我从许多客户处获得MSG,他们可能会使用各种系统。我仍然认为这个问题是大量的收件人。 – 2013-03-25 20:59:24