如何获取 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 邮件的发件人的主要内容,如果未能解决你的问题,请参考以下文章
如何通过指定发件人地址使用 Microsoft.Office.Interop.Outlook.MailItem 发送邮件