SenderEmailAddress 属性 不包含内部联系人的标准电子邮件地址

SenderEmailAddress property does not contain a standard email address for internal contacts

背景:

使用 Outlook 规则触发脚本,我希望来自某些 high-visibility 客户的所有电子邮件在收到后立即打开。

我已经成功地设置了一个规则,当那些客户给我发邮件时触发。它看起来像这样:

而且我已经成功创建了一个脚本,可以打开对电子邮件的回复,具体取决于发件人。它看起来像这样:

Sub OpenEmailImmediately(oEmail As Outlook.MailItem)

    Select Case oEmail.Sender
        Case "Jobs, Steve"
            oEmail.Reply.Display
    End Select

End Sub

虽然这可行,但我已经使用 .Sender 属性 实现了它。

问题:

更喜欢使用发件人的电子邮件地址(与我收到的每封电子邮件关联的唯一值)来实现此目的。不幸的是,oEmail.SenderEmailAddress,我希望它包含电子邮件地址,只对外部客户有效

在进行故障排除时,我发现我期望 oEmail.SenderEmailAddress 的值与此类似:

steve.jobs@apple.com

对于内部电子邮件,它的值与此类似:

/O=APPLE/CN=RECIPIENTS/CN=JOBSS6738

问题:

有没有办法让这个脚本适用于内部 外部使用他们的标准电子邮件地址?

实现解决方案的代码:

使用下面德米特里的回答,代码被修改为使用电子邮件地址:

Sub OpenEmailImmediately(oEmail As Outlook.MailItem)

    If oEmail.SenderEmailType = "EX" Then
        Select Case oEmail.Sender.GetExchangeUser().PrimarySmtpAddress
            Case "steve.jobs@apple.com"
                oEmail.Reply.Display
        End Select
    Else
        Select Case oEmail.SenderEmailAddress
            Case "tom.brady@patriots.com"
                oEmail.Reply.Display
        End Select
    End If

End Sub

这是一个完全有效的“EX”类型地址(相对于 SMTP)- 检查 MailItem.SenderEmailType 属性 的值。如果是“SMTP”,则使用 MailItem.SenderEmailAddress。如果是“EX”,使用MailItem.Sender.GetExchangeUser().PrimarySmtpAddress.

您也可以尝试使用 MailItem.PropertyAccessor.GetProperty 阅读 PidTagSenderSmtpAddress MAPI 属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x5D01001F)- 查看带有 OutlookSpy (I am its author - click IMessage button) or MFCMAPI 的消息.