Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将具有数千个收件人的Outlook消息导入PST_C#_Com_Outlook_Outlook 2010_Outlook Redemption - Fatal编程技术网

C# 将具有数千个收件人的Outlook消息导入PST

C# 将具有数千个收件人的Outlook消息导入PST,c#,com,outlook,outlook-2010,outlook-redemption,C#,Com,Outlook,Outlook 2010,Outlook Redemption,我有许多Outlook MSG需要保存为其他格式,如MHT。MSG每个都有数千个收件人,我知道MSG结构不够健壮,无法处理大量收件人。我相信我的第一步是将MSG导入PST,它可以处理大量收件人 我正在使用Outlook 2010和Redemption 5.4(完整版)。我准备使用Outlook对象模型或Redemption来实现我的目标。平台:Windows7SP1,64位 我尝试过以下方法: //Establish Session RDOSession rdoSession = new RDO

我有许多Outlook MSG需要保存为其他格式,如MHT。MSG每个都有数千个收件人,我知道MSG结构不够健壮,无法处理大量收件人。我相信我的第一步是将MSG导入PST,它可以处理大量收件人

我正在使用Outlook 2010和Redemption 5.4(完整版)。我准备使用Outlook对象模型或Redemption来实现我的目标。平台:Windows7SP1,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);
此代码导致此异常:
OpenIMSGisting中出错:MAPI\u E\u损坏\u数据

我相信Transend Migrator可以转换具有大量用户或接收者的MSG。然而,由于高许可成本,这不是一种选择


如何将消息保存为其他格式?

0x8004011B是MAPI\u E\u损坏的数据。看起来您的PST存储已损坏。您是否尝试使用scanpst.exe修复它?

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

我已经确认,该项目能够打开MSG与大量的收件人。我用一个有2499个接收者的MSG测试了它


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

我相信被报告为损坏的数据是MSG。我想将MSG导入的PST很好,我可以毫无问题地导入其他MSG。MSG有数千个收件人,这使得Outlook无法打开它。我有两个版本的009.msg,一个是用OutlookSpy创建的,另一个是通过将消息从PST拖到桌面创建的。两者表现出相同的行为。如果可以重新创建它们,请将它们保存为OLMSGNICODE格式而不是olMsg。尝试使用OLMSGNICODE从PST源重新创建MSG会导致此Outlook Spy脚本错误:
没有足够的可用内存来运行此程序。退出一个或多个程序,然后重试。
通常,我无法指定源MSG的格式。我从许多客户那里得到MSG,他们可能使用各种系统。我仍然认为问题在于收件人的数量太多。如果你不能重新创建MSG文件,我认为你无能为力——Outlook not Redemption(使用相同的API)也不能打开它们。您当然可以显式解析MSG格式的文件,但错误来自COM系统,而不是事件MAPI(MSG文件是OLE存储文件)。谢谢您,@Dmitry Streblechenko,我相信将MSG视为OLE存储的想法是我需要的。
RDOMail rdoMail = rdoSession.GetMessageFromMsgFile(fi.FullName, false);
string strNormalizedSubject = NormalizeSubject(rdoMail.Subject);

rdoMail.SaveAs(diMht.FullName + @"\" + strNormalizedSubject + ".mht", Redemption.rdoSaveAsType.olMHTML);