OFT と MSG (および下書き) の違い


Outlook でメッセージを保存する際に、OFT (Outlook テンプレート) と MSG (Outlook メッセージ形式) の 2 種類の保存方法があります。
しかし、この二つのファイル フォーマットは、フォーマットそのものには違いがありません。
そのため、MSG として保存したファイルの拡張子を OFT にしたとしても、問題なく開くことができます。
では、その違いは何なのでしょうか?

Outlook に限らず、Word や Excel などのテンプレート ファイルも、実際にはファイル フォーマットは通常のファイルと同じで、違うのはレジストリの関連付けになります。たとえば、Outlook は MSG ファイルを開くときには /f オプションを、OFT ファイルを開くときには /t オプションを使って開くようになっているだけなのです。
つまり、これらのファイルの違いは Outlook がそのファイルをどのように開くか、ということになります。

OFT ファイルを開く場合、Outlook はそのファイルに含まれているデータを元に新しいメッセージを作成して表示します。そのため、メッセージに変更して保存すると、それは OFT ファイルに反映されるのではなく、下書きフォルダに保存されます。

一方、MSG ファイルを開く場合、Outlook はメッセージがメールボックスなどにある場合と同様に開きます。つまり、MSG ファイルをダブルクリックして開かれたメッセージはその MSG ファイルそのものであり、メッセージに何らかの変更を加えて保存すれば、それは MSG ファイルに反映されるということです。ただし、例外的に、送信前のメッセージを MSG ファイルとして保存し、それを開いてメッセージを送信した場合、元の MSG ファイルには送信した情報は反映されません。そのため、OFT ではなく MSG ファイルをテンプレートとして使うということもできてしまいます。

しかし、実はそのような使い方には問題があります。

OFT ファイルから作成されるメッセージには OFT のほとんどのデータがコピーされますが、一部のプロパティはコピーされず、コピーされないプロパティの中に PR_SEARCH_KEY と PR_REPORT_TAG があります。PR_SEARCH_KEY や PR_REPORT_TAG はメッセージを識別したり、複数のメッセージの関連付けを行うために使用されるプロパティで、以下のような Outlook の機能はこのプロパティを使用しています。

・開封確認
・配信確認
・返信ボタン
・メッセージの取り消し

OFT ファイルを使って作成したメッセージであれば、PR_SEARCH_KEY や PR_REPORT_TAG がメッセージ固有のものとなるため、関連付けが正しく行われます。
しかし、MSG ファイルを使って作成したメッセージでは、これらのプロパティは元の MSG ファイルのものが使われます。つまり、ある MSG ファイルから複数のメッセージを作成して送信した場合、それらのメッセージはすべて同一の PR_SEARCH_KEY および PR_REPORT_TAG が設定されているということになります。
その結果、開封確認や配信確認などが正しく関連付けられず、[確認] タブに誤ったステータスが表示されたり、[確認] タブが表示されないという現象が発生します。また、メッセージの取り消し処理では、同じ PR_SEARCH_KEY を持つすべてのメッセージが取り消しによって削除されるため、意図しないメッセージまで削除されることになります。
そして、同様の現象は下書きのメッセージをコピーしてテンプレートのように使う場合にも発生します。下書きのメッセージをコピーすると、上記のプロパティもコピーされてしまい、同じキーを持つ複数のメッセージが作成される状況となるためです。

したがって、基本的には、あるメッセージを元に複数のメッセージを作成したい場合は OFT ファイルを使う必要があります。もし、何らかの理由で OFT ファイルではなく MSG ファイルや下書きのメッセージを使うのであれば、上記のような機能は使わないように気をつける必要があるでしょう。
また、メッセージを OFT ファイルとして保存すると、既定では %APPDATA%\Microsoft\Templates に保存されるので使い勝手が悪いという話もありますが、前述の通り OFT ファイルと MSG ファイルの違いは拡張子だけです。そこで、下書きのメッセージをドラッグアンドドロップでデスクトップなどに保存し、拡張子を MSG から OFT に変えてしまえばテンプレートとして問題なく使えるようになります。(アイコンは変わりませんが。)

また、どうしても下書きフォルダのメッセージをテンプレートとして使いたいということであれば、以下のようなマクロを使うことをお勧めします。
このマクロは選択されているメッセージを一時的に OFT ファイルとして保存し、そのファイルをテンプレートとして新しいメッセージを作成します。そのため、不要なプロパティのコピーは行われません。また、このマクロで作成したメッセージを送信しても元のメッセージはそのまま残っているため、同じメッセージをいくつも下書きに保存しておく必要がなくなります。さらに、送信済みのメッセージや他の人から送信されたメッセージであっても、このマクロを使えば送信前のメッセージとして新規に作成されるので、再送したいメッセージを開く必要がなくなります。

Public Sub OpenAsTemplate()
    Dim myItem 'As MailItem
    Dim myNewItem 'As MailItem
    Dim objFSO 'As FileSystemObject
    Dim fldTemp 'As Scripting.Folder
    Dim strTempFile 'As String
    Const TemporaryFolder = 2
    If Application.ActiveExplorer.Selection.Count = 1 Then
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set fldTemp = objFSO.GetSpecialFolder(TemporaryFolder)
        strTempFile = fldTemp.Path & "\" & objFSO.GetTempName()
        Set myItem = Application.ActiveExplorer.Selection.Item(1)
        myItem.SaveAs strTempFile, olTemplate
        Set myNewItem = Application.CreateItemFromTemplate(strTempFile)
        myNewItem.Display
        objFSO.DeleteFile strTempFile, True
    End If
End Sub

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中