Exchange 电子邮件是否总是在 headers 中包含 SMTP 地址?
Do Exchange emails always include SMTP addresses in the headers?
以下是我对 Outlook add-in 开发的基本问题:
SMTP MIME headers 是否可用于所有邮件项目?甚至 "internal" Exchange 电子邮件(Exchange 用户到 Exchange 用户)?
我正在使用以下代码获取 headers,但我不确定它是否可靠:
mailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E");
这些 headers 是否始终在发件人:、抄送:和类似字段中包含有效的 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 Add-in,它显示在 Outlook 中的每封电子邮件旁边。它是一个侧边栏,显示有关当前电子邮件线程中所有参与者的信息。我的 add-in 需要参与者的 SMTP 电子邮件地址。
一切都很好 - 除非线程中的用户是 Exchange 用户。在那种情况下,Outlook 不会让我直接访问他们的 SMTP 地址。我必须遵循类似于此 post 的过程:
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。
那么回到我最初的问题 - 我能否可靠地期望电子邮件 headers 可用,如果是这样,那些 headers 是否始终包含有效的 SMTP 电子邮件地址?
感谢任何建议。
的回复副本
不,PR_TRANSPORT_MESSAGE_HEADERS
并不总是可用。仅当邮件已转换为 MIME 并通过 SMTP 连接器传送时才设置。对于在同一域内 on-prem 个 Exchange 邮箱之间传递的邮件,情况并非如此。
如果我是你,我会
缓存地址 - 人们倾向于与同一个人通信
在大多数情况下,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 按钮。
Outlook 对象模型不支持多任务处理,但您可以在扩展 MAPI(C++ 或 Delphi)或 Redemption 中的 RDO 对象系列中执行此操作(我也是它的作者,任何语言)。
以下是我对 Outlook add-in 开发的基本问题:
SMTP MIME headers 是否可用于所有邮件项目?甚至 "internal" Exchange 电子邮件(Exchange 用户到 Exchange 用户)?
我正在使用以下代码获取 headers,但我不确定它是否可靠:
mailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E");
这些 headers 是否始终在发件人:、抄送:和类似字段中包含有效的 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 Add-in,它显示在 Outlook 中的每封电子邮件旁边。它是一个侧边栏,显示有关当前电子邮件线程中所有参与者的信息。我的 add-in 需要参与者的 SMTP 电子邮件地址。
一切都很好 - 除非线程中的用户是 Exchange 用户。在那种情况下,Outlook 不会让我直接访问他们的 SMTP 地址。我必须遵循类似于此 post 的过程:
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。
那么回到我最初的问题 - 我能否可靠地期望电子邮件 headers 可用,如果是这样,那些 headers 是否始终包含有效的 SMTP 电子邮件地址?
感谢任何建议。
不,PR_TRANSPORT_MESSAGE_HEADERS
并不总是可用。仅当邮件已转换为 MIME 并通过 SMTP 连接器传送时才设置。对于在同一域内 on-prem 个 Exchange 邮箱之间传递的邮件,情况并非如此。
如果我是你,我会
缓存地址 - 人们倾向于与同一个人通信
在大多数情况下,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 按钮。Outlook 对象模型不支持多任务处理,但您可以在扩展 MAPI(C++ 或 Delphi)或 Redemption 中的 RDO 对象系列中执行此操作(我也是它的作者,任何语言)。