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



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

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

到目前为止,Redemption在这里做得非常好,与我在"野生msg文件语料库"上测试的其他一切相比。

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

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

后两个恰恰是结果email文件中缺少真实电子邮件地址的地址。

所以我试图重写Address属性,像这样:

recipient.Address = recipient.SMTPAddress;

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

如何在不丢失真实电子邮件地址内部地址的情况下将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)。

最新更新