VSTO Outlook.Recipients 值以不同于内部电子邮件地址的方式显示外部电子邮件地址

VSTO Outlook.Recipients Value Displaying External Email Addresses Differently than Internal Email Addresses

我们有一个 Outlook VSTO 加载项正在检查 Outlook.Recipients 域以查看收件人是否在我们的网络外部

Dim objRecipients As Outlook.Recipients

假设我们要遍历 2 个收件人并检查域:

Do While objRecipients.Count >= loopCount
  If InStr(1, objRecipients(loopCount).Address, "@") Then
    ...
  End If
  Loop +=1
Loop

对于我们看到的外部 objRecipient(loopCount).Address,说:

  gmail.com

哪个好

但是,对于内部地址,我们看到的似乎是 LDAP/Exchange 地址,而不是像这样的 SMTP 地址:

/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=9asd9asd9d9d9asd9asd9asd9asd9asd9asd-Fred Smith"

这似乎才刚刚开始发生,但不确定为什么或如何解决这个问题。

知道为什么会这样吗?

谢谢

阅读这篇文章帮助我们解决了问题:

https://docs.microsoft.com/en-us/office/vba/outlook/Concepts/Address-Book/obtain-the-e-mail-address-of-a-recipient

我们需要使用 Outlook.PropertyAccessor 属性 来获得正确的 SMTP 地址:

  Dim objRecipients As Outlook.Recipients

  Dim pa As Outlook.PropertyAccessor
  Const PR_SMTP_ADDRESS As String = 
  "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

        Do While objRecipients.Count >= loopCount

            'set propertyaccessor object
            pa = objRecipients(loopCount).PropertyAccessor

           'set propertyaccessor domain based on smtp address
           paDomain = pa.GetProperty(PR_SMTP_ADDRESS)

           Loop +=1
 Loop