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

标签 vba outlook outlook-2010

背景:

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

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

emails from Jobs and Wozniak

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

Sub OpenEmailImmediately(oEmail As Outlook.MailItem)

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

End Sub

虽然这有效,但我已经使用 .Sender 实现了它属性(property)。

问题:

更愿意使用发件人的电子邮件地址(与我收到的每封电子邮件相关的唯一值)来实现此目的。不幸的是,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

最佳答案

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

您还可以尝试使用 MailItem 读取 PidTagSenderSmtpAddress MAPI 属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x5D01001F) .PropertyAccessor.GetProperty - 查看带有 OutlookSpy 的消息(我是它的作者 - 单击 IMessage 按钮)或 MFCMAPI .

关于vba - SenderEmailAddress 属性不包含内部联系人的标准电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900156/

相关文章:

excel - 强制另存为,MS Excel VBA

excel - 使用后期绑定(bind)订阅事件

c# - 以编程方式激活 Outlook

outlook - 我可以使用标准 Outlook 预览器之一来预览其他文件类型吗?

c# - Outlook 2010 中的命令栏

excel - 为什么我不能在 Excel 2016 VBA 中 ReDim 索引为 LongPtr 或 LongLong 的数组

excel - 找到文本vba时代码不返回值

string - VBA 多行字符串问题

vba - Application.AdvancedSearch 语法问题

vba - 从电子邮件中提取第 3 行和第 4 行