我尝试使用mailItem.SenderEmailAddress
和mailItem.Sender.Address
,但它们都返回一个看起来像这样的字符串:
/O=DOMAINNAME/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHI43SPCLT)/CN=RECIPIENTS/CN=JOE BLOGGS8C3
实际上我想要返回joebloggs@domainname.co.uk
。
有人有什么想法吗?
非常感谢。
编辑:我进行了一些调查;它对于'SenderEmailType' SMTP的电子邮件地址完美地工作,但对于Exchange电子邮件地址则不起作用。
编辑2:我尝试了这里指定的代码,但我认为它已经过时了,因为它会抛出“无法创建Active-X组件”错误。
编辑3:对于任何遇到与我相同问题的人,我找到了答案(以C#的形式,转换为VB.NET,但仍然有效):
Private Function GetSenderSMTPAddress(mail As Outlook.MailItem) As String
Dim PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
If mail Is Nothing Then
Throw New ArgumentNullException()
End If
If mail.SenderEmailType = "EX" Then
Dim sender As Outlook.AddressEntry = mail.Sender
If sender IsNot Nothing Then
'Now we have an AddressEntry representing the Sender
If sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry OrElse sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry Then
'Use the ExchangeUser object PrimarySMTPAddress
Dim exchUser As Outlook.ExchangeUser = sender.GetExchangeUser()
If exchUser IsNot Nothing Then
Return exchUser.PrimarySmtpAddress
Else
Return Nothing
End If
Else
Return TryCast(sender.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS), String)
End If
Else
Return Nothing
End If
Else
Return mail.SenderEmailAddress
End If
End Function