以下是我对Outlook加载项开发的基本问题:
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电子邮件地址?
谢谢你的建议。
不,PR_TRANSPORT_MESSAGE_HEADERS
并不总是可用。仅在邮件转换为MIME并通过SMTP连接器传递时才设置。对于同一域中的本地Exchange邮箱之间传递的邮件,情况并非如此。
如果我是你我会
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按钮)。