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

Internal addresses are missing after MSG to EML conversion using Redemption

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

RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(msgFile);
msg.SaveAs(emlFile, rdoSaveAsType.olRFC822);

到目前为止,与我针对 "wild MSG-files corpus".

测试过的其他所有内容相比,Redemption 在这方面做得非常好

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

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

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

所以我尝试像那样覆盖 Address 属性:

recipient.Address = recipient.SMTPAddress;

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

如何通过兑换将 MSG 转换为 EML 而不会丢失内部地址的真实电子邮件地址

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

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