Outlook Express で分割送信されたメッセージを結合するマクロ


Outlook Express にはメッセージのサイズが一定の値を超えた場合に、分割して送信するという機能があります。
Outlook は POP サーバーから分割されたメッセージをまとめて受信した場合には自動的に結合させることができるのですが、いくつかのメッセージが別々のタイミングで受信されたり、Exchange サーバー経由で受信したような場合には結合させることができません。
しかし、分割されたメッセージはひとつのテキストファイルに結合して EML ファイルとして保存することで、Outlook Express や Windows Mail によって開くことが可能となります。
ただ、手作業で行うとメッセージが破損してしまう可能性もあるため、これを自動化するマクロを作ってみました。
分割されたメッセージを CTRL+左クリックで選択した後、下記のマクロを実行すると新規に作成されたメッセージに結合されたメッセージが添付され、それを Outlook Express などで開くことができるようになります。


' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub MergeMessages()
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection
    Dim strFileName As String
    Dim strTempFile As String
    Dim myFSO As Object
    Dim myFile As Object
    Dim myTempFile As Object
    Dim iMax As Integer
    Dim iCur As Integer
    Dim i As Integer
    Dim strSubject As String
    Dim strMergeSubject As String
    Dim l As Integer
    Dim myTemp As Outlook.MailItem
    Set myOlExp = Application.ActiveExplorer
    Set myOlSel = myOlExp.Selection
    If myOlSel.Count = 0 Then
        Exit Sub
    End If
    Set myFSO = CreateObject("Scripting.FileSystemObject")
    strFileName = Environ("TEMP") & "\結合されたメッセージ.eml"
    strTempFile = Environ("TEMP") & "\~tmp.dat"
    Set myFile = myFSO.CreateTextFile(strFileName, True)
    strSubject = myOlSel.Item(1).Subject
    If Right(strSubject, 1) = "]" Then
        l = InStrRev(strSubject, "/")
        If l > 0 Then
            iMax = CInt(Mid(strSubject, l + 1, Len(strSubject) - l - 1))
        End If
        strSubject = Left(strSubject, InStrRev(strSubject, "[") - 1)
    End If
'
    For iCur = 1 To iMax
        For i = 1 To myOlSel.Count
            If myOlSel.Count > 9 Then
                strMergeSubject = strSubject & "[" & Right("0" & iCur, 2) & "/" & iMax & "]"
            Else
                strMergeSubject = strSubject & "[" & iCur & "/" & iMax & "]"
            End If
            With myOlSel.Item(i)
                If .Subject = strMergeSubject Then
                    If .Body = "" Then
                        .Attachments(1).SaveAsFile strTempFile
                        Set myTempFile = myFSO.OpenTextFile(strTempFile, 1)
                        myFile.Write myTempFile.ReadAll
                        myTempFile.Close
                        myFSO.DeleteFile strTempFile
                    Else
                        myFile.Write .Body
                    End If
                    Exit For
                End If
            End With
        Next
        If i > myOlSel.Count Then iMax = 0
    Next
    myFile.Close
    If iMax = 0 Then
        MsgBox "結合するメッセージが不足しているか、メッセージの指定に誤りがあります。", vbCritical, "メッセージの結合"
    Else
        Set myTemp = Application.ActiveExplorer.CurrentFolder.Items.Add
        myTemp.Subject = strSubject & " - 結合済み"
        myTemp.Body = "このアイテムに添付されたファイルを開いて、結合されたメッセージを取り出してください。" & vbCrLf
        myTemp.Attachments.Add strFileName, olByValue, 99, "結合されたメッセージ"
        myTemp.Display
        Set myTemp = Nothing
    End If
    myFSO.DeleteFile strFileName
    Set myFSO = Nothing
End Sub


マクロの登録方法やメニューへの追加について

広告

Outlook Express で分割送信されたメッセージを結合するマクロ」への10件のフィードバック

  1. はじめまして。
    いつも便利にマクロを使わせて頂いております。
    ありがとうございます。

    分割メールの結合マクロについて教えて頂きたいのですが、
    選択メール数が11通を超えると
    「結合するメッセージが不足しているか、メッセージの指定に誤りがあります」
    と表示され、結合できなくなってしまいます。

    お恥ずかしながらマクロの知識がないので
    どのように修正すればよいのかわからないでおります。

    もしよろしければ11通以上に分割されたメールを結合できるようにする方法を
    ご教授頂けないでしょうか?

    お手数ですがご検討の程お願い申し上げます。

      • outlooklab様

        さっそくご対応頂きありがとうございます。
        11通以上でも、無事結合できました。
        とても嬉しいです。
        本当にありがとうございます。

  2. 初めまして。
    何の知識もなく、結合できるアドイン等ないかと探している所に
    この場所へ行きついてしまいました。

    VBAの登録までできたのですが、分割されたメールの添付が大きすぎるのか
    サイズが大きすぎて結合できない旨の表示が出てきます。

    お聞きしてばかりで大変申し訳ありませんが、大きいサイズの
    添付ファイルのあるメールを結合するにはどのようにすればよいのか
    ご教授頂けますでしょうか?

    お手数ですが、よろしくお願いいたします。

    • このマクロではサイズが大きすぎて結合ができないというようなエラーは出力するように作っていません。
      実際に発生したエラーの詳細を省略せずに教えていただけないでしょうか?

      • いつも拝見させて頂いてます。

        返信遅れましたが、上記の続きです。

        通常使用時には結合できるのですが、10通を超えたあたりから

        「実行時エラー’-2147467259(80004005)’:
        添付ファイルのサイズが最大値を超えています。」
        という表示が出てきます。

        その他、必要情報等ありますでしょうか?

        ご対応の程、宜しくお願い致します。

      • 結合した EML ファイル自体はできているのでしょうか?
        もし結合した EML ファイルの読み込みの際にエラーが表示されるのであれば、実際に制限を超えてしまっているのだと思います。そのような場合は、メール以外の方法でデータを転送することを検討いただいた方が良いかもしれません。

  3. これは助かりました!無事結合できました。
    ありがとうございました。

    当方のオフィスではOutlook2003以降とExpressサーバーで運用されているのですが、「同じOutlookなら受信できますよね」という無邪気なメッセージとともに大量の分割メールが送られてきて困っておりました。

    ただ、eml形式で出力されることから、未設定のWindows Live Mailで無理やり開く必要がありました。
    MS Outlookのみで運用している場合に、素直に解決する方法はないでしょうか。

    • Outlook 2007 以降であれば EML ファイルを直接開くことも可能なのですが、Outlook 2003 ではそれができません。
      EML ファイルにしてからさらに解析をすることも不可能ではないのですが、そうするとマクロが複雑になってしまうので…

  4. […] 以前、Outlook Express で分割送信されたメッセージを結合するマクロを紹介したのですが、このマクロを作成した当時は Outlook で EML ファイルを開くことができなかったため、最終的に EML ファイルを Outlook Express などで開くという手順になっていました。 […]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中