none
VBA Outlookで受信したメールの送信者のアドレスが取得できない RRS feed

  • 質問

  • はじめまして
    ExcelVBAで、Outlookで受信したメールの送信者アドレスの取得方法を教えて頂けますでしょうか。
    下記コードで、MailItemオブジェクトのSenderEmailTypeがEXの場合とそうでない場合(SMTP等)でアドレスを取得しようとしますが取得ができません。
    SMTPの場合、(A)で値が取得できません。
    EXの場合、(B)でオブジェクトが取得できず、変数mailSenderはNothingになってしまいます

    VBEのウォッチでは、アドレスに関連する箇所の値が<>となっています。また同様にBODY、HTMLBODYも<>となり本文の取得もできません。
    これは、どのようなことが原因と考えられるでしょうか。ご教示頂きますよう、よろしくお願いします。

    Sub Test()
        Dim objOutlook As Outlook.Application
        Dim myNamespace As Outlook.Namespace
        Dim myInbox As Outlook.Folder
        Dim oItem As Outlook.MailItem
        Dim mailSender As AddressEntry
        Dim i As Long, j As Long
       
        Set objOutlook = New Outlook.Application
        Set myNamespace = objOutlook.GetNamespace("MAPI")
        Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)
       
        Const olExchangeUserAddressEntry = 0, olExchangeRemoteUserAddressEntry = 5
         
        On Error Resume Next
       
        For i = 1 To myInbox.Items.count
            With ThisWorkbook.Worksheets("Test Mail")
                Set oItem = myInbox.Items(i)
                .Cells(i, 1).Value = oItem.ReceivedTime
                If oItem.SenderEmailType <> "EX" Then
                    .Cells(i, 2).Value = oItem.SenderEmailAddress          ・・・(A)
                Else
                    Set mailSender = oItem.Sender                          ・・・(B)
                    If Not mailSender Is Nothing Then
                        Select Case mailSender.AddressEntryUserType
                            Case olExchangeUserAddressEntry, _
                                olExchangeRemoteUserAddressEntry
                                Dim exchUser As Object
                                Set exchUser = mailSender.GetExchangeUser
                                If Not exchUser Is Nothing Then
                                    .Cells(i, 2).Value = exchUser.PrimarySmtpAddress
                                End If
                            End Select
                    End If
                End If
            End With
        Next i
    End Sub

    2019年12月16日 12:37

すべての返信

  • 補足になります。
    いまだ、上記問題が解決できていないのですが、当該コミュニティで気になる記事をみつけました
    「こんにちは。日本マイクロソフト Outlook サポート チームです。グローバル アドレス帳の情報で、表示させたくないユーザーやグループ、連絡先などについて [アドレス一覧に表示しない] と設定することにより、グローバル アドレス帳に表示させないように設定することができます。 しかし、このような設定を行っている場合、アドインやマクロで Outlook Object Model を利用して情報を取得する場合に SMTP アドレスなどの情報が取得できないことがあります。」
    今回の問題とは直接関係していませんが、会社のセキュリティ等の設定で、マクロでアドレスを取得できない場合もあるのでしょうか?


    2020年2月6日 2:57