【问题标题】:MIME MAPI IConverterSession COMException on Activator.CreateInstanceActivator.CreateInstance 上的 MIME MAPI IConverterSession COMException
【发布时间】:2017-05-23 06:35:10
【问题描述】:

我一直在尝试使用 IConverterSession 从 EML 转换为 MSG(从 MIME 转换为 MAPI),但我一直在遇到 COM 错误。 我使用 C# MAPIMethods 类来包装 IConverterSession(就像在这里找到的那​​个:Save Mail in MIME format (*.eml) in Outlook Add-In)。

首先,我遇到了未知 clsid 的问题,通过这篇文章 (https://blogs.msdn.microsoft.com/stephen_griffin/2014/04/21/outlook-2013-click-to-run-and-com-interfaces/) 解决了。

现在正确的注册表项已被编辑,我面临一个新问题:首先,我收到一条错误消息The operating system is not presently configured to run this application,然后我收到一个COMException:Retrieving the COM class factory for component with CLSID {4E3A7680-B77A-11D0-9DA5-00C04FD65685} failed due to the following error: 8007013d The system cannot find message text for message number 0x in the message file for . (Exception from HRESULT: 0x8007013D).

我的代码是:

    Type converter = Type.GetTypeFromCLSID(MAPIMethods.CLSID_IConverterSession, true); 
    object obj = Activator.CreateInstance(converter);
    MAPIMethods.IConverterSession session = (MAPIMethods.IConverterSession)obj;

在“object obj = Activator.CreateInstance(converter);”上引发错误

COMException 通常表示“类型是 COM 对象,但用于获取类型的类标识符无效,或者标识的类未注册。”。所以要么Type converter = Type.GetTypeFromCLSID(MAPIMethods.CLSID_IConverterSession, true); 没有返回正确的类型,要么在某处仍然缺少注册表项。

我在 Win 64 位上使用 Office 15 (2013) C2R 32 位。该应用程序是在 x86 构建配置上设置的。

我在某处缺少什么吗?有人可以帮忙吗?

【问题讨论】:

    标签: c# outlook mapi


    【解决方案1】:

    “操作系统当前未配置为运行此应用程序” - 听起来您的应用程序在具有 32 位版本 Outlook 的机器上编译为 x64。

    您是否尝试过使用 Redemption?它为 .Net 语言包装了 IConverterSession。像下面这样的东西应该可以完成这项工作。

    using Redemption;
    ...
    Redemmption.RDOSession session = new Redemmption.RDOSession();
    Redemmption.RDOMail msg = session.CreateMessageFromMsgFile(@"c:\temp\test.msg");
    msg.Import(@"c:\temp\test.eml", Redemption.rdoSaveAsType.olRFC822);
    msg.Save();
    

    olRFC822 格式将使用 IConverterSession(如果可用)或内部兑换转换器(如果 IConverterSesison 不可用)(例如,在 Exchange 版本的 MAPI 或无法使用 IConverterSession 的最新版本的 Outlook 2016 C2R 下)。 如果您总是想强制兑换或 Outlook (IConverterSession) 转换器,请使用 olRFC822_Redemption 或 olRFC822_Outlook。

    【讨论】:

    • 嗨,德米特里,我有点期待你会回答。确实,我的机器是64位的,Office是32位的,但是我将目标构建设置为32位。
    • 您的 Outlook 2013 C2R 版本是多少? MS 最近更改了 Outlook 2016 C2R(不了解 Outlook 2013),以防止在 Outlook 之外创建 IConverterSession。
    • (我试图编辑我的第一条评论,但为时已晚......)虽然它工作得很好,但我想避免赎回,因为我想与我的同事分享(我们从 Lotus 迁移到 Outlook,我想取回电子邮件)。所以我尽量让它保持独立。
    • 我们使用的是 build 15.0.4833.1000,这就是我所知道的。
    • 即使我不想使用 Redemption,并且了解导致错误的原因,我也会将您的答案标记为答案。但如果有人可以帮助解决错误,我很乐意接受任何建议!
    猜你喜欢
    • 2010-09-11
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多