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

6

背景:

我想使用Outlook规则来触发脚本,使来自某些高知名度客户的所有电子邮件在收到时立即打开。

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

来自Jobs和Wozniak的电子邮件

我还成功创建了一个脚本,根据发件人打开回复邮件。它看起来像这样:

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

问题:
是否有办法使此脚本适用于内部和外部,并使用他们的标准电子邮件地址?
已实施解决方案的代码:
使用Dmitry下面的答案后,修改了代码以使用电子邮件地址:
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

3
这个问题的答案是否解决了您的疑问?使用Excel VBA获取发件人的电子邮件地址 - FreeSoftwareServers
这不是同一个问题,虽然它们都使用 .SenderEmailAddress,但细微差别不同。我认为,隐藏和关闭此问题将对社区造成损失。 - Instant Breakfast
1个回答

12

这是一种完全有效的类型为“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(我是其作者-单击IMessage按钮)或MFCMAPI查看消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接