使用Redemption获取发件人电子邮件地址的可靠方法

时间:2018-04-06 03:55:49

标签: c# email outlook outlook-addin outlook-redemption

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

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

但是,这不适用于Redemption RDOMail对象,因为RDOAddressEntry界面缺少AddressEntryUserTypeGetExchangeUser方法。

RDOAddressEntry对象的文档说明了SMTPAddress属性的以下内容:

  

String,只读。返回给定用户的SMTP地址。如果   地址类型为“SMTP”,返回值与之相同   由Address属性返回。如果地址类型是“EX”,   如果,则Redemption尝试检索PR_SMTP_ADDRESS属性   不成功,它从中检索默认的SMTP地址   PR_EMS_AB_PROXY_ADDRESSES扩展MAPI属性。

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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