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

问题描述 投票:0回答:1

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

  1. SMTP MIME标头是否可用于所有邮件项目?甚至是“内部”Exchange电子邮件(Exchange用户到Exchange用户)? 我使用以下代码来获取标题,但我不确定它是否可靠: mailItem.PropertyAccessor.GetProperty( “http://schemas.microsoft.com/mapi/proptag/0x007D001E”);
  2. 这些标头是否始终包含From:,CC:和类似字段中的有效SMTP电子邮件地址?例如: From: "Darth Vader" <[email protected]> To: "Palpatine" <[email protected]> CC: "Boba Fett" <[email protected]>, "IG-88" <[email protected]>, "Bossk" <[email protected]> 与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电子邮件地址?

谢谢你的建议。

c# outlook smtp exchange-server outlook-addin
1个回答
0
投票

我在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系列对象中执行此操作。
© www.soinside.com 2019 - 2024. All rights reserved.