Próbowałem, używając mailItem.SenderEmailAddress
i mailItem.Sender.Address
ale obaj powrócić ciąg znaków, który wygląda tak:Jak mogę uzyskać adres e-mail nadawcy za pomocą Outlook.MailItem w VB.NET?
/O=DOMAINNAME/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHI43SPCLT)/CN=RECIPIENTS/CN=JOE BLOGGS8C3
Gdzie w rzeczywistości chcę [email protected]
być retrurned.
Ktoś ma jakieś pomysły?
Dziękuję bardzo.
Edytuj: Zrobiłem trochę kopania; działa idealnie na adresy e-mail SMTP "SenderEmailType", po prostu nie działa dla adresów e-mail Exchange.
Edycja 2: Próbowałem kodu określonego here, ale zakładam, że jest nieaktualny, ponieważ rzuca błąd "Nie można utworzyć składnika Active-X".
EDIT 3: Dla każdego, kto kiedykolwiek miał ten sam problem jak ja, znalazłem odpowiedź (w języku C#, VB.NET przekształca się, choć nadal działa):
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
Działa to tylko z Outlookiem 2010 lub nowszym, prawda? – BlueMonkMN