使用Redemption进行MSG到EML转换后,内部地址丢失

时间:2015-08-12 15:41:19

标签: c# mapi outlook-redemption msg eml

我目前正在评估用于将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而不会丢失内部地址的真实电子邮件地址

1 个答案:

答案 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)。