IMAP INTERNALDATE解説 - 日付が壊れる理由

1 min

すべてのメールに含まれる3つの日付

IMAPサーバーに保存されたすべてのメールは、少なくとも3つの異なる日付値を持っています。これらの日付がどう機能するか、そしてメールクライアントがどれを表示するかを理解することが、移行が日付を壊す理由を理解する鍵です。この記事はIMAPの日付システムの技術的な詳細分析であり、IT管理者やメールプロトコルの仕組みを理解したいすべての方を対象としています。

Dateヘッダー(RFC 2822)

DateヘッダーはRFC 2822で定義されており、メールメッセージの本文の一部です。メッセージが作成され送信された日時を記録します。このヘッダーは送信者のメールクライアントによって設定され、通常は変更されません。Dateヘッダーは「いつメールが書かれたか」に相当します。

Receivedヘッダー

Receivedヘッダーはメッセージが配信チェーンの各サーバーを通過する際に追加されます。各サーバーが独自のReceivedヘッダーをメッセージの先頭に追加します。最新のReceivedヘッダー(最上位)は、メッセージが最後のサーバーに到達した日時を記録します。通常の配信では、これが受信者のメールサーバーへの到着時刻に相当します。

IMAP INTERNALDATE

INTERNALDATEはIMAPサーバーが各メッセージに対して保存するメタデータです。メッセージ自体の一部ではなく、サーバーがメッセージの挿入または受信時刻として記録する値です。INTERNALDATEはRFC 3501(IMAPプロトコル仕様)で定義されています。

メールクライアントがどの日付を表示するか

Outlook

Microsoft Outlookはデフォルトで「受信日時」列を表示し、これはReceivedヘッダーの最新のタイムスタンプまたはINTERNALDATEに基づきます。ユーザーが「送信日時」列に切り替えると、Dateヘッダーが使用されます。ほとんどのOutlookユーザーはデフォルトの「受信日時」ビューを使用しています。

Apple Mail

Apple MailはINTERNALDATEとReceivedヘッダーの組み合わせを使用します。OSバージョンによって優先順位が異なりますが、一般的にはINTERNALDATEに重みを置きます。Apple Mailの日付修正も参照してください。

Thunderbird

ThunderbirdのデフォルトはDateヘッダーに基づくため、移行後でも正しい日付を表示する場合があります。ただし「受信日時」列を選択すると移行日が表示されます。Thunderbirdの日付修正も参照してください。

Gmail(ウェブ)

GmailウェブインターフェースはDateヘッダーを主に使用するため、移行後でも正しい日付を表示することが多いです。しかしINTERNALDATEはIMAPクライアント経由のアクセスに影響します。

IMAP移行中に何が起こるか

IMAP APPENDコマンド

移行ツールがメッセージを宛先サーバーに挿入する際、IMAP APPENDコマンドを使用します。このコマンドではINTERNALDATEを指定できますが、サーバーは挿入時に新しいReceivedヘッダーを追加します。これにより、たとえINTERNALDATEが正しく設定されていても、最新のReceivedヘッダーは移行タイムスタンプを持つことになります。

連鎖反応

結果として、クライアントがReceivedヘッダーを使用する場合(Outlookなど)、移行日が表示されます。クライアントがINTERNALDATEを使用する場合(Apple Mailの場合がある)、INTERNALDATEが正しく保持されていれば正しい日付が表示されますが、保持されていなければ移行日が表示されます。クライアントがDateヘッダーを使用する場合(Thunderbirdのデフォルト、Gmailウェブ)、正しい日付が表示されます。ツール別ガイドはBitTitan OutlookCloudM Outlookimapsync Outlookをご覧ください。

防げない理由

IMAPプロトコル(RFC 3501)はサーバーがAPPEND時にReceivedヘッダーを追加することを許容(多くの実装では要求)しています。これはプロトコルレベルの動作であり、移行ツールの設定では変更できません。どのツールを使用しても、宛先サーバーがReceivedヘッダーを追加する限り、この問題は発生します。

防止はできませんが、事後の修正は可能です。Redate.ioは移行アーティファクトを特定し、すべてのクライアントで正しい日付を復元します。

IMAP INTERNALDATEの問題を修正したいですか? 無料分析を開始して影響範囲を確認してください。