我目前正在评估将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
)。