【问题标题】:Reliable way of getting sender's email address using Redemption使用 Redemption 获取发件人电子邮件地址的可靠方法
【发布时间】:2023-03-29 02:44:01
【问题描述】:

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

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

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

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

字符串,只读。返回给定用户的 SMTP 地址。如果 地址类型为“SMTP”,返回值同 由 Address 属性返回。如果地址类型是“EX”, Redemption 尝试检索 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;

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    我无法想象为什么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 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多