我使用RDOMail.SenderEmailAddress
属性在Outlook中获取发件人的电子邮件地址,但我最近意识到,在某些情况下,对于SMTP或IMAP电子邮件帐户,此属性偶尔为null
,对电子邮件到达收件箱后。
使用Outlook互操作库获取发件人的电子邮件地址有一种相当复杂的方法:https://msdn.microsoft.com/library/office/ff184624.aspx
但是,这不适用于Redemption RDOMail
对象,因为RDOAddressEntry
界面缺少AddressEntryUserType
和GetExchangeUser
方法。
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;
由于我没有可靠的方法来测试我的理论,我在这里寻求帮助,看看是否有人有更多处理这个问题的经验。
提前致谢。
答案 0 :(得分:2)
除非您有部分下载的项目(特定于IMAP4),否则我无法确定SenderEmailAddress
为何为空。没有理由拥有AddressEntryUserType
或GetExchangeUser
方法 - 您只需要地址类型 - 如果它是" EX",您有GAL用户,否则是SMTP地址。
要获取发件人SMTP地址,请检查SenderEmailType
属性。如果它不是" EX",只需使用SenderEmailAddress
属性即可。如果是" EX",请使用PidTagSenderSmtpAddress
阅读RDOMail.Fields["http://schemas.microsoft.com/mapi/proptag/0x5D01001F"]
属性。如果您返回null,请检查RDOMail.Sender
是否为空,并阅读RDOMail.Sender.SMTPAddress
属性。