24

mailItem.SenderEmailAddressandを使用してみ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 コンポーネントを作成できません」というエラーがスローされるため、古いと思います。

EDIT 3: 私と同じ問題を抱えている人のために、答えを見つけました(VB.NETに変換されたC#では、まだ動作します):

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
4

6 に答える 6

9

誰かがまだこの問題の解決策を探している場合は、この要件を処理するためのコードの簡略化された真の 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
于 2015-08-26T12:37:11.477 に答える
9

VBAソリューションも(VB.netを翻訳しただけです)

Private Function GetSenderSMTPAddress(mail As Outlook.MailItem) As String

    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
End Function
于 2014-10-03T01:16:51.153 に答える
8

私にとってはるかに簡単な答えは次のとおりです

外部アドレスを取得するには、SenderEmailAddress を使用した可能性があります。次に、内部 (つまり、Exchange から) アドレスの場合は、代わりに Sender.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
于 2017-07-10T16:50:43.900 に答える
-1

簡単にするために使用する場合は、VBA 関数を作成しました。サンプル呼び出しは 、 がオブジェクトであると予想されるLeft(GetEmailAddress(mai) & Space(50), 50) 場所になります。で使用され、正常にテストされましたmaiMailItemMicrosoft 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
于 2016-10-07T15:55:29.430 に答える