我目前正在评估用于将MSG文件转换为EML文件的redemption
库。
RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(msgFile);
msg.SaveAs(emlFile, rdoSaveAsType.olRFC822);
到目前为止,救赎在这方面做得非常好,与我在“野生MSG文件语料库”中测试的其他内容形成鲜明对比。
然而,内部电子邮件地址存在问题。对于内部电子邮件地址,生成的EML文件仅包含personal
部分地址,但不包含带有@
符号的真实电子邮件地址。
我可以看到RDOMail
的收件人对象在任何情况下都包含SMTPAddress
属性中的真实电子邮件地址。
但是Address
属性存在差异,其中包含外部地址的“真实电子邮件地址”,但内部地址包含/O=EXAMPLE ORGANIZAION/OU=SOME GROUP/cn=Recipients/cn=FBarney
。
后者恰好是生成的EML文件中缺少真实电子邮件地址的地址。
所以我试图像这样覆盖Address
属性:
recipient.Address = recipient.SMTPAddress;
但是这对最终生成的EML文件没有任何影响。
如何通过兑换将MSG转换为EML而不会丢失内部地址的真实电子邮件地址?
答案 0 :(得分:4)
这表示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)。