Exchange电子邮件是否始终在标头中包含SMTP地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exchange电子邮件是否始终在标头中包含SMTP地址?相关的知识,希望对你有一定的参考价值。

以下是我对Outlook加载项开发的基本问题:

  1. SMTP MIME标头是否可用于所有邮件项目?甚至是“内部”Exchange电子邮件(Exchange用户到Exchange用户)? 我使用以下代码来获取标题,但我不确定它是否可靠: mailItem.PropertyAccessor.GetProperty( “http://schemas.microsoft.com/mapi/proptag/0x007D001E”);
  2. 这些标头是否始终包含From:,CC:和类似字段中的有效SMTP电子邮件地址?例如: From: "Darth Vader" <dvader@empire.com> To: "Palpatine" <palps@empire.com> CC: "Boba Fett" <boba@empire.com>, "IG-88" <ig88@empire.com>, "Bossk" <bossk@empire.com> 与Active Directory可分辨名称相对,如... From: /O=EMPIRE PARTNERS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=VADER, DARTHBC4 TO: /O=EMPIRE PARTNERS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=PALPSBC4

这里有更多背景来澄清这些问题:

我正在开发一个Outlook加载项,它与Outlook中的每封电子邮件一起显示。它是一个侧边栏,显示有关当前电子邮件主题中所有参与者的信息。我的加载项需要参与者的SMTP电子邮件地址。

这一切都很好 - 除非线程上的用户是Exchange用户。在这种情况下,Outlook不允许我直接访问其SMTP地址。我必须遵循类似这篇文章的过程:Extract SMTP address from Exchange User in the FROM field of a message

String addressString = null;

try
{
    ExchangeUser exchangeUser = address.GetExchangeUser();
    if (exchangeUser != null)
    {
        addressString = exchangeUser.PrimarySmtpAddress;
    }
} catch {

}

if (addressString == null)
{
    addressString = address.Address;
}

这样做的问题是,如果用户的Exchange Server连接中断或延迟,则将此用户解析为SMTP地址可能会很慢。它甚至可以完全冻结Outlook。

回到我原来的问题 - 我能否可靠地期望电子邮件标题可用,如果可以,那些标题是否始终包含有效的SMTP电子邮件地址?

谢谢你的建议。

答案

我在MSDN论坛@ https://social.msdn.microsoft.com/Forums/en-US/2f0bd7b7-1865-42d1-9b17-86d5d91b15c1/do-exchange-emails-always-include-smtp-addresses-in-the-headers?forum=outlookdev上的回复


不,PR_TRANSPORT_MESSAGE_HEADERS并不总是可用。仅在邮件转换为MIME并通过SMTP连接器传递时才设置。对于同一域中的本地Exchange邮箱之间传递的邮件,情况并非如此。

如果我是你我会

  1. 缓存地址 - 人们帐篷与同一个人对应
  2. 在大多数情况下,SMTP地址可直接在邮件本身上使用。例如。发件人有PidTagSenderSmtpAddress_W(DASL名称http://schemas.microsoft.com/mapi/proptag/0x5D01001F),收件人有PR_SMTP_ADDRESS(DASL名称http://schemas.microsoft.com/mapi/proptag/0x39FE001F)。第一个可以使用MailItem.PropertyAccesssor.GetProperty访问,第二个可以使用Recipient.PropertyAccesssor.GetProperty访问。您可以在OutlookSpy中看到这些属性(单击IMessage按钮)。
  3. Outlook对象模型不支持多任务处理,但您可以在扩展MAPI(C ++或Delphi)或Redemption(任何语言)中的RDO系列对象中执行此操作。

以上是关于Exchange电子邮件是否始终在标头中包含SMTP地址?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 HTTP 标头字段中包含多个 CRLF?

是否可以在XMLHttpRequest标头中包含antiforgerytoken?

如何在 PHP 的 cURL POST HTTP 请求中包含授权标头?

在 HTTP 数据包(Cookie、标头或 JSON)中包含 JWT 令牌的正确方法

是否可以在 Laravel 的 HTML 电子邮件中包含图像

在cmake的所有cpp文件中包含c ++标头[重复]