【问题标题】:How to retrieve the sender email address如何检索发件人的电子邮件地址
【发布时间】:2020-07-13 03:17:47
【问题描述】:

我在 Outlook 2013 中编写了一个宏,我需要将发件人电子邮件地址作为字符串检索

一个简单的版本是

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

Dim oMail As MailItem
Set oMail = Item

Dim sender as String
sender = oMail.SenderEmailAddress 

End Sub 

上面的效果很好。

我现在向 Outlook 添加了一个新的电子邮件帐户,这就是问题所在。

如果我创建一个新电子邮件,它将使用我的 default@mail.com 电子邮件地址。如果我然后更改发送电子邮件的帐户(到 myOtherAccount@mail.com),则 VBa 中的 SenderEmailAddress 不会反映此更改......它仍然显示(在监视窗口中)为 default.mail.com

如何让 Outlook 重新检查发件人(因为我假设它在某处缓存它)?

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    ItemSend 事件触发后设置所有与发送者相关的属性。您最早可以看到发件人属性是在“已发送邮件”文件夹上触发 Items.ItemAdd 事件时。

    【讨论】:

    • 对,所以这是设计使然?很好,你知道解决方法吗? Outlook 清楚地知道要从哪个电子邮件发送(因为它是从正确的帐户发送的),我想知道这些值是否通过属性/方法调用公开?
    • 检查 MailItem.SendUsingAccount 的值。如果该属性为空,则假定将使用默认帐户。然后,您可以读取 Account.SmtpAddress 属性。
    • 比你,MailItem.SendUsingAccount 是答案
    • 只要确保您可以处理返回 NULL 的 SendUsingAccount - 它不能保证被设置。
    【解决方案2】:

    只需在应用程序中定义您的文件夹:启动

    Public Sub Application_Startup()
    
    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myFolder = myNameSpace.GetDefaultFolder(olFolderSentbox)
    

    结束子

    然后只需将上面的代码更改为 itemAdd 事件 喜欢

    Private Sub myFolder_ItemAdd(ByVal item As Object)
    

    【讨论】:

      【解决方案3】:

      试试这个:

      senderEmail = Item.SendUsingAccount

      【讨论】:

        猜你喜欢
        • 2017-07-21
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多