使用 Redemption 将 MSG 转换为 EML 后,内部地址丢失

Fab*_*ney 4 c# mapi msg eml outlook-redemption

我目前正在评估redemption将 MSG 文件转换为 EML 文件的库。

RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(msgFile);
msg.SaveAs(emlFile, rdoSaveAsType.olRFC822);
Run Code Online (Sandbox Code Playgroud)

到目前为止,与我针对“野生 MSG 文件语料库”测试过的其他所有内容相比,Redemption 在这里做得非常好。

然而,内部电子邮件地址存在问题。对于内部电子邮件地址,生成的 EML 文件personal仅包含地址的一部分,但不包含带有符号的真实电子邮件地址@

在任何情况下,我都可以看到RDOMail的收件人对象包含SMTPAddress属性中的真实电子邮件地址。但是Address包含外部地址的“真实电子邮件地址”的属性有所不同,但类似于/O=EXAMPLE ORGANIZAION/OU=SOME GROUP/cn=Recipients/cn=FBarney内部地址的属性。

后者正是在生成的 EML 文件中缺少真实电子邮件地址的地址。

所以我试图覆盖这样的Address属性:

recipient.Address = recipient.SMTPAddress;
Run Code Online (Sandbox Code Playgroud)

但这对最后生成的 EML 文件没有任何影响。

如何在不丢失内部地址的真实电子邮件地址的情况下将 MSG 转换为 EML 并进行兑换?

Dmi*_*nko 5

这表明 EX 类型地址无法转换为 SMTP。如果当前 MAPI 会话无权访问承载这些 GAL 对象的 Exchange 服务器,通常会发生这种情况。在您的特定情况下,根本没有 MAPI 会话。您可以从 Outlook 对象模型将 RDOSession.MAPIOBJECT 属性设置为 Namespace.MAPIOBJECT 以与 Outlook 共享会话,也可以调用 RDOSession.Logon/LogonExchangeMailbox/etc。

您还可以尝试指定 olRfc822_Redemption 格式以强制 Redemption 使用其内部 MIME 转换器(它跳过很多圈以从邮件本身而不是 GAL 中获取 SMTP 地址)。如果安装了 Outlook,olRfc822 默认使用内置的 Outlook 转换器 (IConvertorSession)。