【问题标题】:Get the actual recipient of an exchange email获取交换电子邮件的实际收件人
【发布时间】:2015-01-27 20:46:36
【问题描述】:

我有以下代码:

For each Item in ofChosenFolder.Items
    msgbox Item.Subject
    for each recip in Item.Recipients
        msgbox "sent to " & recip.address
        msgbox "sent to " & recip.addressEntry
    next
next

我有一些电子邮件是发给我 awalker@example.com 的,还有一些是发给 projects@example.com 的。

我的交换邮箱都收到了。

使用上面的代码,我总是得到我的 Exchange /O=EXAMPLE/OU=EXCHANGE.../CN=RECIPIENTS/CN=A Walker 等以及我的 Exchange 名称“A Walker”。这是因为 Exchange 会根据全球通讯簿解析电子邮件。

有没有办法阻止它解析电子邮件地址并识别电子邮件发送到的实际 smtp 地址?

【问题讨论】:

    标签: vbscript outlook exchange-server-2010


    【解决方案1】:

    这看起来像是一个完全有效的 EX 类型地址。获取 SMTP 地址

    1. 检查AddressEntry.Type 属性。如果是“SMTP”,只需使用AddressEntry.Address 属性即可。

    2. 如果是“EX”,使用AddressEntry.GetExchangeUser.PrimarySmtpAddress


    答案是获取PR_TRANSPORT_MESSAGE_HEADERS

    在 VBS 中执行此操作:

    For Each Item in myNameSpace.GetDefaultFolder(olFolderInbox).items
        PropName = "http://schemas.microsoft.com/mapi/proptag/0x007D001E"  
        Set oPA = Item.PropertyAccessor
        Header = oPA.GetProperty(PropName)
        'parse the "To" line out of your header to get the email address
    Next  
    

    【讨论】:

    • 两个地址都用于同一个 Exchange 邮箱。因此,两个地址的地址类型都是 EX。然后,第 2 步就变得多余了,因为邮箱的 PrimarySmtpAddress 是 awalker@example.com,它会同时接收该邮箱和发送到 projects@example.com 的电子邮件。
    • 我不确定我理解你的意思 - 你的意思是两个 SMTP 地址都是同一个邮箱的代理地址吗?你看过 PR_TRANSPORT_MESSAGE_HEADERS 属性了吗?
    • 对不起,我才刚刚回来看这个问题。我已经打印了 PR_TRANSPORT_MESSAGE_HEADERS,它们将我的 projects@example.com 显示为“接收自”(而不是发送到 awalker@example.com 的电子邮件中的“收件人”)。但是,它还为我的 AddressEntry.Type 显示 EX,为我的 AddressEntry.GetExchangeUser.PrimarySmtpAddress 显示 awalker@example.com!!
    • 那么在 PR_TRANSPORT_MESSAGE_HEADERS 中 To header 是什么?
    • 那么邮件是如何发送到那个邮箱的呢?您可以发布完整的 PR_TRANSPORT_MESSAGE_HEADERS 属性吗?您可以在 OutlookSpy 中看到它(单击 IMessage 按钮)。
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多