使用兑换获取发件人电子邮件地址的可靠方式



我一直在使用RDOMail.SenderEmailAddress属性在Outlook中获取发件人的电子邮件地址,但我最近意识到,在某些情况下,对于SMTP或IMAP电子邮件帐户,此属性偶尔会在电子邮件到达收件箱后立即null

有一种相当复杂的方法可以使用 Outlook 互操作库获取发件人的电子邮件地址:https://msdn.microsoft.com/library/office/ff184624.aspx

但是,这不适用于 RedemptionRDOMail对象,因为RDOAddressEntry接口缺少AddressEntryUserTypeGetExchangeUser方法。

RDOAddressEntry对象的文档对SMTPAddress属性进行了如下说明:

字符串,只读。返回给定用户的 SMTP 地址。如果 地址类型为"SMTP",返回值与 由 Address 属性返回。如果地址类型为"EX", PR_SMTP_ADDRESS如果 不成功,它会从 PR_EMS_AB_PROXY_ADDRESSES扩展的 MAPI 属性。

如果我在我的方法中执行此操作,看起来这可能是获取发件人地址的更可靠方法:

if (rdoMail.SenderEmailAddress != null) return rdoMail.SenderEmailAddress;
if (rdoMail.Sender != null) return rdoMail.Sender.SMTPAddress;
return null;

由于我没有可靠的方法来测试我的理论,我在这里寻求帮助,看看是否有人在处理这个问题方面有更多的经验。

提前谢谢。

我无法想象为什么SenderEmailAddress会为空,除非您有部分下载的项目(特定于 IMAP4)。没有理由使用AddressEntryUserTypeGetExchangeUser方法 - 您只需要地址类型 - 如果是"EX",则您有一个 GAL 用户,否则是一个 SMTP 地址。

若要获取发件人 SMTP 地址,请检查SenderEmailType属性。如果它不是"EX",则只需使用SenderEmailAddress属性。如果是"EX",则使用RDOMail.Fields["http://schemas.microsoft.com/mapi/proptag/0x5D01001F"]读取PidTagSenderSmtpAddress属性。如果返回 null,请检查RDOMail.Sender是否不为 null 并读取RDOMail.Sender.SMTPAddress属性。

最新更新