用語辞典・通信プロトコル

IMAP

IMAPとは

IMAPは、メールをサーバー上で管理し、複数端末からフォルダーや既読状態を同期できるプロトコルです。正式名称はInternet Message Access Protocol(インターネット・メッセージ・アクセス・プロトコル)で、アイマップと読みます。

受信箱、送信済み、利用者が作ったメールボックスをサーバーに置き、メッセージ、既読、返信済み、重要、削除予定などのフラグを操作します。端末は必要部分をキャッシュし、オンライン時にサーバー状態と再同期します。

IMAPの基準となる状態はサーバー上にあり、端末はその一部を表示・キャッシュするため、別端末での移動や既読変更がサーバーを介して共有されます。すべての本文・添付を常に端末へ保存する必要はありません。

中央のサーバーでメールボックス、メッセージ、フラグを管理し、複数端末へ同期する検索・部分取得・オフラインキャッシュを使い、再接続時に双方の変更を調整する
中央IMAPサーバーの複数メールボックスをノートPC、スマートフォン、タブレットが同期し、フォルダー移動、既読・重要フラグ、削除確定を共有し、サーバー検索、本文先行と添付の部分取得、オフラインキャッシュ再同期、永続UIDと変わる並び順を示した図解
図1端末ごとの表示順やローカル専用フォルダーは同期対象外の場合があります。サーバー上のメールボックスと属性を確認します。

接続状態と、選択中メールボックスの状態を分ける

ログイン後にメールボックスを選び、その範囲のメッセージと変更を操作するコマンド完了応答と、途中で届くサーバー発の状態更新を両方処理する
Authenticate接続と利用者認証

TLSを確立し、対応機能を確認してアカウントへログインする

Mailboxフォルダーを管理

LIST、CREATE、RENAMEなどでメールボックス階層を調べ、変更する

Select一つを選択

SELECTでメッセージ操作対象を開き、UIDVALIDITYや件数を受け取る

Fetch必要部分を取得

UID、フラグ、ヘッダー、本文区間、添付など必要な属性だけを要求する

Store状態を更新

既読・重要・削除予定フラグを変更し、サーバー状態へ反映する

Resync差分を再同期

UIDと変更情報を使い、追加・変更・消失をローカルキャッシュへ反映する

図2IMAP4rev2は複数コマンドを取り込んでいますが、サーバー能力はCAPABILITY応答で確認し、未対応拡張へ依存しません。

シーケンス番号は現在の並び、UIDはメールボックス内の継続識別子

選択中メールボックスの各メッセージには、現在の並びを表すmessage sequence number(メッセージ・シーケンス・ナンバー)があります。前のメッセージがexpungeされると後ろの番号が詰まるため、長期保存IDには使えません。

UID(Unique Identifier/ユニーク・アイデンティファイアー)は、同じメールボックスとUIDVALIDITYの組で継続して識別します。別メールボックスへコピー・移動したメッセージは新しいUIDを持ちます。UIDVALIDITYが変わったら、保存済みUID対応を作り直します。

FETCHは、一覧表示に必要な部分から段階的に取得できる

端末は最初にUID、フラグ、日付、サイズ、Envelopeなど一覧用属性を取得し、選択されたメールだけ本文を取得できます。BODY.PEEKを使えば、内容を取得してもSeenを自動付与しない読み方ができます。

大きな添付は本文構造から位置と種類を知り、必要な区間だけ取得できます。通信量削減になる一方、端末に完全保存されていないメールはオフラインで開けません。端末の「全メールを同期」「直近だけ」設定と保存容量を確認します。

SEARCHはサーバー側の候補抽出、表示の正確さは索引と文字処理にも依存する

SEARCHは差出人、件名、日付、フラグ、本文などの条件をサーバーへ送り、該当番号やUIDを得ます。全メッセージを端末へ取り込まず候補を絞れます。SORTやTHREADなどは対応拡張で、常に利用できるとは限りません。

文字集合、MIME復号、暗号化本文、サーバー索引の更新時点により結果が変わる場合があります。検索結果が空でもメール不存在と即断せず、条件、選択メールボックス、サーバー能力、Webメール側の独自索引を分けます。

Deletedは削除予定フラグで、EXPUNGEがメッセージを消す

IMAPの基本削除は、STOREでDeletedフラグを付け、EXPUNGEで対象メッセージをメールボックスから永久削除します。CLOSEは選択を閉じる際に削除予定を消去する動作を含みます。IMAP4rev2のMOVEは別メールボックスへ移す操作をまとめます。

複数端末が同時利用中に一括EXPUNGEすると、別端末が削除予定にしたメッセージも消える可能性があります。UID EXPUNGEなど対象限定機能を使い、削除予定、ゴミ箱への移動、サーバーからの永久削除を画面上でもログ上でも区別します。

IDLEとサーバー発更新で、新着や変更を早く反映する

IMAPはコマンド応答の途中でも、選択中メールボックスの件数変化やフラグ変更をuntagged応答として通知できます。IDLEでは接続を待機状態にし、新着などをサーバーから通知してポーリング間隔を短くできます。

モバイルOSの省電力、NATタイムアウト、サーバー接続数制限で長時間接続が切れることがあります。再接続時は通知を取りこぼした前提で、UIDと同期トークンから差分を確認します。プッシュ通知サービスとIMAP IDLEは同じ仕組みとは限りません。

IMAPはメール送信を行わず、TLSの外側に保存保護が必要

IMAPはサーバー上メールのアクセス・操作用で、メール投稿はSMTP submissionを使います。送信済みメールをIMAPフォルダーへ追加する処理は、メールアプリまたはサーバーが別に行います。

現行アクセスでは通常、接続直後からTLSを使うポート993で証明書名を検証します。TLSは端末とIMAPサーバー間を保護しますが、サーバー管理者、バックアップ、端末キャッシュから本文を隠す終端間暗号化ではありません。

仕様の確認資料:RFC 9051「IMAP Version 4rev2」RFC 8314「Cleartext Considered Obsolete」

関連用語