我目前正在评估 redemption
用于将 MSG 文件转换为 EML 文件的库。
RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(msgFile);
msg.SaveAs(emlFile, rdoSaveAsType.olRFC822);
到目前为止,与我针对我们的“野生 MSG 文件语料库”测试的其他所有内容相比,Redemption 在这里做得非常好。
然而,内部电子邮件地址存在问题。对于内部电子邮件地址,生成的 EML 文件确实包含 personal
仅部分地址,但不是真实电子邮件地址 @
符号。
我可以看到 RDOMail
的收件人对象包含 SMTPAddress
中的真实电子邮件地址任何情况下的属性(property)。
但是 Address
有区别包含外部地址的“真实电子邮件地址”但类似 /O=EXAMPLE ORGANIZAION/OU=SOME GROUP/cn=Recipients/cn=FBarney
的属性用于内部地址。
后者正是在生成的 EML 文件中缺少真实电子邮件地址的地址。
所以我试图覆盖 Address
这样的属性:
recipient.Address = recipient.SMTPAddress;
但这对最后生成的 EML 文件没有任何影响。
如何通过兑换将 MSG 转换为 EML 而不会丢失内部地址的真实电子邮件地址?
最佳答案
这表明 EX 类型地址无法转换为 SMTP。如果当前 MAPI session 无权访问托管这些 GAL 对象的 Exchange 服务器,通常会发生这种情况。在您的特定情况下,根本没有 MAPI session 。您可以从 Outlook 对象模型将 RDOSession.MAPIOBJECT
属性设置为 Namespace.MAPIOBJECT
以与 Outlook 共享 session ,或者您可以调用 RDOSession.Logon
/LogonExchangeMailbox
/等
您还可以尝试指定 olRfc822_Redemption
格式以强制 Redemption 使用其内部 MIME 转换器(它跳过很多环节从邮件本身而不是 GAL 获取 SMTP 地址)。默认情况下,如果安装了 Outlook,olRfc822 使用内置的 Outlook 转换器 (IConvertorSession
)。
关于c# - 使用 Redemption 将 MSG 转换为 EML 后,内部地址丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969833/