IMAPとは
IMAPは、メールをサーバー上で管理し、複数端末からフォルダーや既読状態を同期できるプロトコルです。正式名称はInternet Message Access Protocol(インターネット・メッセージ・アクセス・プロトコル)で、アイマップと読みます。
受信箱、送信済み、利用者が作ったメールボックスをサーバーに置き、メッセージ、既読、返信済み、重要、削除予定などのフラグを操作します。端末は必要部分をキャッシュし、オンライン時にサーバー状態と再同期します。
IMAPの基準となる状態はサーバー上にあり、端末はその一部を表示・キャッシュするため、別端末での移動や既読変更がサーバーを介して共有されます。すべての本文・添付を常に端末へ保存する必要はありません。

接続状態と、選択中メールボックスの状態を分ける
TLSを確立し、対応機能を確認してアカウントへログインする
LIST、CREATE、RENAMEなどでメールボックス階層を調べ、変更する
SELECTでメッセージ操作対象を開き、UIDVALIDITYや件数を受け取る
UID、フラグ、ヘッダー、本文区間、添付など必要な属性だけを要求する
既読・重要・削除予定フラグを変更し、サーバー状態へ反映する
UIDと変更情報を使い、追加・変更・消失をローカルキャッシュへ反映する
シーケンス番号は現在の並び、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」