【问题标题】:Import Outlook MSG with Thousands of Recipients to PST将包含数千个收件人的 Outlook MSG 导入 PST
【发布时间】:2013-04-03 19:21:24
【问题描述】:

我有许多 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。但是,由于许可成本高,这不是一种选择。

如何将味精保存为另一种格式?

【问题讨论】:

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


    【解决方案1】:

    0x8004011B 是 MAPI_E_CORRUPT_DATA。看起来您的 PST 商店已损坏。您是否尝试使用 scanpst.exe 修复它?

    【讨论】:

    • 我相信被报告为损坏的数据是味精。我想导入味精的 PST 很好,我可以毫无问题地导入其他味精。 MSG 有数千个收件人,这使得 Outlook 无法打开它。我有两个版本的 009.msg,一个是使用 OutlookSpy 创建的,一个是通过将消息从 PST 拖到我的桌面创建的。两者都表现出相同的行为。
    • 如果您可以重新创建它们,请将它们保存为 olMsgUnicode 格式而不是 olMsg。
    • 尝试使用 olMsgUnicode 从 PST 源重新创建 MSG 会导致此 OutlookSpy 脚本错误:There is not enough free memory to run this program. Quit one or more programs, and then try again. 通常,我无法指定源 MSG 的格式。我从许多客户那里得到了味精,他们可能使用各种系统。我仍然认为问题在于接收者人数众多。
    • 如果您无法重新创建 MSG 文件,我认为您无能为力 - Outlook 和 Redemption(使用相同的 API)都无法打开它们。你当然可以显式解析 MSG 格式的文件,但是错误来自 COM 系统,而不是事件 MAPI(MSG 文件是 OLE 存储文件)。
    • 谢谢@Dmitry Streblechenko,我相信将 MSG 视为 OLE 存储的想法是我需要的想法。
    【解决方案2】:

    Dmitry 建议我将 MSG 文件视为 OLE 存储文件。这个想法把我带到了这个网站:Reading an Outlook MSG File in C# CodeProject

    我已确认该项目能够打开具有大量收件人的 MSG。我用有 2,499 个收件人的 MSG 对其进行了测试。

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

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2019-11-18
      相关资源
      最近更新 更多