none
OUTLOOK2007からオートメーションを使ってメール検索をすると、「メッセージング インターフェースによって原因不明のエラーがかえされました」の例外が発生します。 RRS feed

  • 質問

  • お世話になります。

    VB2005でオートメーションを使ってOUTLOOK2007からメールを検索し、画面表示します。

     受信トレイ配下のフォルダ"ほげほげ"に読み込まれたメールのうち、件名="ふがふが"&送信者="piyopiyo@domain.co.jp"のメールをOUTLOOKから表示します。
     転送メールを考慮し、送信者アドレスはまずメール本文内を検索させます。

    下記ソース抜粋の下線部のRestrictメソッドで例外が発生します。
    検索フィルタを疑って、色々変えてみたのですが状態は変わりません。
    ご指摘願えれば幸いです。
    よろしくお願い致します。

            Dim oApp As Outlook.Application = New Outlook.Application()
            Dim oNs As Outlook.NameSpace = oApp.GetNamespace("MAPI")
            Dim oInbox As Outlook.MAPIFolder = oNs.GetDefaultFolder(OlDefaultFolders.olFolderInbox)
            Dim myFolder As Outlook.Folder = Nothing
            Dim myItem As Outlook.MailItem
            Dim i As Integer
            Dim strTitle As String = "ふがふが"
            Dim strSenderEmailAddress As String = "piyopiyo@domain.co.jp"
            Dim strFilter1 As String = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch '" & strTitle & "'"
            Dim strFilter2 As String = "@SQL=" & Chr(34) & "urn:schemas:httpmail:textdescription" & Chr(34) & " ci_phrasematch '" & strSenderEmailAddress & "'"
            Dim strFilter3 As String = "[SenderEmailAddress] = '" & strSenderEmailAddress & "'"
            Dim oItems1 As Outlook.Items
            Dim oItems2 As Outlook.Items


                For i = 1 To oInbox.Folders.Count Step 1
                    If oInbox.Folders(i).Name = "ほげほげ" Then
                        myFolder = oInbox.Folders(i)
                        Exit For
                    End If
                Next i


                '検索
                oItems1 = myFolder.Items
                ' 件名で検索
                Select Case oItems1.Count
                    Case 0
                        oItems2 = Nothing
                    Case 1
                        If DirectCast(oItems1(1), Outlook.MailItem).Subject Like "*" & strTitle Then
                            oItems2 = oItems1
                        Else
                            oItems2 = Nothing
                        End If
                    Case Else
                        oItems2 = oItems1.Restrict(strFilter1)
                End Select
                If oItems2 Is Nothing Then
                    oItems1 = Nothing
                Else
                    ' 送信者で検索
                    Select Case oItems2.Count
                        Case 0
                            oItems1 = Nothing
                        Case 1
                            If DirectCast(oItems2(1), Outlook.MailItem).Body Like "*" & strSenderEmailAddress & "*" Then
                                oItems1 = oItems2
                            ElseIf DirectCast(oItems2(1), Outlook.MailItem).SenderEmailAddress = strSenderEmailAddress Then
                                oItems1 = oItems2
                            Else
                                oItems1 = Nothing
                            End If
                        Case Else
                            oItems1 = oItems2.Restrict(strFilter2)
                            If oItems1.Count = 0 Then
                                oItems1 = oItems2.Restrict(strFilter3)
                            End If
                    End Select
                End If


                ' Mailの取得/表示
                If oItems1 Is Nothing Then
                    MessageBox.Show("指定メールがありません。", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Else
                    For oItems2 In oItems1
                        myItem = oItems2
                        myItem.Display()
                    Next oItems2
                End If

    プログラムを実行するPCによって、例外が発生したりしなかったり…の差が出ています。環境(設定内容)の問題でしょうか?

    2017年7月11日 13:31