如何获取 Outlook 邮件的发件人

Posted

技术标签:

【中文标题】如何获取 Outlook 邮件的发件人【英文标题】:How to get the sender of an outlook message 【发布时间】:2017-03-15 00:39:53 【问题描述】:

我有一些代码可以部分填充电子邮件作为回复。但是除非他们在(一个/我们的)上,否则我无法得到发件人?交换服务器。

Public Sub CreateMessage()

Dim EmailFrom As String
Dim NewMessage As Outlook.MailItem
Dim OldMessage As Outlook.MailItem


Set OldMessage = Application.ActiveInspector.CurrentItem
Set NewMessage = Application.CreateItem(olMailItem)
EmailFrom = OldMessage.Sender.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E")
NewMessage.Body = Body(EmailFrom)
NewMessage.htmlBody = HTMLBody(EmailFrom)
NewMessage.Recipients.Add (EmailFrom)
NewMessage.Display
Set NewMessage = Nothing

End Sub

我收到的消息是“属性“http://schemas.microsoft.com/mapi/proptag/0x39FE001E”未知或找不到。”它似乎只适用于内部消息。

有人知道在 Outlook VBA 中获取适用于所有人的邮件发件人的方法吗?


基于 Dimitry 的 cmets 修复:

Public Sub CreateMessage()

Dim EmailFrom As String
Dim NewMessage As Outlook.MailItem
Dim OldMessage As Outlook.MailItem


Set OldMessage = Application.ActiveInspector.CurrentItem
Set NewMessage = Application.CreateItem(olMailItem)
Select Case OldMessage.SenderEmailType
    Case "EX"
        EmailFrom = OldMessage.Sender.GetExchangeUser.PrimarySmtpAddress
    Case Else
        EmailFrom = OldMessage.SenderEmailAddress
End Select
NewMessage.Body = Body(EmailFrom)
NewMessage.HTMLBody = HTMLBody(EmailFrom)
NewMessage.Recipients.Add (EmailFrom)
NewMessage.Display
Set NewMessage = Nothing

End Sub

【问题讨论】:

【参考方案1】:

您正在请求特定于 Exchange 的 PR_SMTP_ADDRESS 属性。检查SenderEmailType 是否为“EX”,然后才读取PR_SMTP_ADDRESS 属性。否则,只需阅读 MailItem.SenderEmailAddress 属性即可。

查看带有OutlookSpy 的消息(单击IMessage)以查看可用属性。

【讨论】:

我不敢相信我错过了!谢谢! 如果是 Exchange,您可能希望使用 MailItem,Sender.GetExchangeUser.PrimarySmtpAddress 代替(当然要检查空值) - PR_SMTP_ADDRESS 不保证可用。 只是想评论一下我需要检查 SenderEmailType。如果类型是“EX”,那么我必须使用我发布的代码,否则 Dmitry 的解决方案可以完美运行。

以上是关于如何获取 Outlook 邮件的发件人的主要内容,如果未能解决你的问题,请参考以下文章

获取收件人的电子邮件地址(Outlook)

如何更改Outlook邮件的发件人?

如何通过指定发件人地址使用 Microsoft.Office.Interop.Outlook.MailItem 发送邮件

如何使用 SMTP 发送邮件并在 Outlook 发件箱中查看邮件?

获取作为 Exchange 用户的收件人的电子邮件地址

如何将相同的回复邮件(模板保存在outlook中)发送给邮件发件人(to,cc)?