2014-06-23 4 views
8

나는 mailItem.SenderEmailAddressmailItem.Sender.Address를 사용하여 시도했지만 둘은 다음과 같습니다 문자열 반환 : VB.NET에서 Outlook.MailItem을 사용하여 보낸 사람 전자 메일 주소를 얻으려면 어떻게해야합니까?

/O=DOMAINNAME/OU=EXCHANGE ADMINISTRATIVE GROUP (FYDIBOHI43SPCLT)/CN=RECIPIENTS/CN=JOE BLOGGS8C3

현실에서 내가 [email protected]이 retrurned 싶지합니다.

누구든지 아이디어가 있습니까?

대단히 감사합니다.

편집 : 일부 파고를했습니다. 'SenderEmailType'SMTP의 전자 메일 주소에 완벽하게 작동하지만 Exchange 전자 메일 주소에서는 작동하지 않습니다.

편집 2 : here 코드를 시도했지만 "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 

답변

19

I 당신 자신의 질문에 대답했는지보십시오. 나는 여기에 C# 함수를 게시 할 것이다. 아무도 필요로하지 않거나 더 많은 도움이 필요하다. 일에 대한 내 C# 기능은 당신이하는 일은 다음과 같습니다

private string getSenderEmailAddress(Outlook.MailItem mail) 
{ 
Outlook.AddressEntry sender = mail.Sender; 
string SenderEmailAddress = ""; 

    if (sender.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry || sender.AddressEntryUserType == Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry) 
    { 
     Outlook.ExchangeUser exchUser = sender.GetExchangeUser(); 
     if (exchUser != null) 
     { 
      SenderEmailAddress = exchUser.PrimarySmtpAddress; 
     } 
    } 
    else 
    { 
     SenderEmailAddress = mail.SenderEmailAddress; 
    } 

    return SenderEmailAddress; 
} 
+0

이 기능은 Outlook 2010 이상에서만 작동합니다. 맞습니까? – BlueMonkMN

6

VBA 솔루션뿐만 아니라

를 문자열로

개인 기능 GetSenderSMTPAddress (Outlook.MailItem으로 메일) (그냥 VB.net 번역) 사람이 아직이 문제에 대한 해결책을 찾고 있다면

If mail Is Nothing Then 
    GetSenderSMTPAddress = vbNullString 
    Exit Function 
End If 
If mail.SenderEmailType = "EX" Then 
    Dim sender As Outlook.AddressEntry 
    Set sender = mail.sender 
    If Not sender Is Nothing Then 
     'Now we have an AddressEntry representing the Sender 
     If sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry Or sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry Then 
      'Use the ExchangeUser object PrimarySMTPAddress 
      Dim exchUser As Outlook.ExchangeUser 
      Set exchUser = sender.GetExchangeUser() 
      If Not exchUser Is Nothing Then 
       GetSenderSMTPAddress = exchUser.PrimarySmtpAddress 
      Else 
       GetSenderSMTPAddress = vbNullString 
      End If 
     Else 
      GetSenderSMTPAddress = sender.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS) 
     End If 
    Else 
     GetSenderSMTPAddress = vbNullString 
    End If 
Else 
    GetSenderSMTPAddress = mail.SenderEmailAddress 
End If 

최종 기능

+0

내가 잘못했음을 고쳐주세요.하지만이 문제는 보낸 사람이 Outlook 2007의 MailItem 속성이 아니기 때문에 Outlook 2010 이상에서만 작동합니다. – BlueMonkMN

+0

감사합니다. 이것은 매우 도움이됩니다. – Neophile

6

, 여기에 이러한 요구 사항을 처리 할 수있는 코드의 단순화와 진정한 블루 VBA 버전입니다.

Public Sub GetCurrentItem() 
On Error Resume Next 
Set ObjSelectedItem = Outlook.ActiveExplorer.Selection.Item(1) 
If TypeName(ObjSelectedItem) = "MailItem" Then 
    If ObjSelectedItem.SenderEmailType = "EX" Then 
     MsgBox (ObjSelectedItem.Sender.GetExchangeUser.PrimarySmtpAddress) 
    Else 
     MsgBox (ObjSelectedItem.SenderEmailAddress) 
    End If 
Else 
    MsgBox ("No items selected (OR) Selected item not a MailItem.") 
End If 
Set ObjSelectedItem = Nothing 
End Sub 
-1

간결성을 위해 사용하려는 경우 VBA 기능을 만들었습니다. 샘플 호출은 Left(GetEmailAddress(mai) & Space(50), 50) 이고 maiMailItem 개체가 될 것으로 예상됩니다. 사용하고 훨씬 간단 대답은 다음과 같다 나에게 Microsoft Outlook 2010

Public Function GetEmailAddress(mai As Object) As String 
    On Error Resume Next 
    Set ObjSelectedItem = mai 
    If TypeName(ObjSelectedItem) = "MailItem" Then 
     If ObjSelectedItem.SenderEmailType = "EX" Then 
      GetEmailAddress = ObjSelectedItem.Sender.GetExchangeUser.PrimarySmtpAddress 
     Else 
      GetEmailAddress = ObjSelectedItem.SenderEmailAddress 
     End If 
    Else 
     GetEmailAddress = "Not a MailItem" 
    End If 

    Set ObjSelectedItem = Nothing 
    End Function 
2

에서 성공적으로 테스트 내부 (즉, 교환에서) 주소 사용을 보낸 사람에 대해 다음, 당신은 SenderEmailAddress을 사용했을 수있는 외부 주소를 얻을 수

대신 .GetExchangeUser.PrimartySmtpAdress

내부 및 외부 주소 모두에서 작동하려면 주소가 내부 또는 외부인지 먼저 확인해야합니다. 아래 코드 예

If itm.SenderEmailType = "SMTP" Then 
     mailfrom = itm.SenderEmailAddress 
Else 
If itm.SenderEmailType = "EX" Then 
     mailfrom = itm.Sender.GetExchangeUser.PrimarySmtpAddress 
End If 
End If 
관련 문제