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

时间:2018-03-12 19:05:08

标签: c# outlook smtp exchange-server outlook-addin

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

  1. 所有邮件都可以使用SMTP MIME标头吗?甚至"内部"交换电子邮件(Exchange用户到Exchange用户)?

    我使用以下代码来获取标题,但我不确定它是否可靠:

    mailItem.PropertyAccessor.GetProperty(" http://schemas.microsoft.com/mapi/proptag/0x007D001E&#34);

  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
    
  3. 这里有更多背景来澄清这些问题:

    我正在开发一个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电子邮件地址?

    感谢您的任何建议。

1 个答案:

答案 0 :(得分: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系列对象中执行此操作。