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

SMTP

SMTPとは

SMTPは、メールを送信・中継するためのアプリケーション層プロトコルです。正式名称はSimple Mail Transfer Protocol(シンプル・メール・トランスファー・プロトコル)で、エスエムティーピーと読みます。

利用者のメールアプリから投稿サーバーへ渡し、送信側メールサーバーが宛先ドメインの配送先を調べ、複数サーバーを中継して受信側メールボックスへ届けます。各区間のサーバーが次へ渡すstore-and-forward(ストア・アンド・フォワード/蓄積交換)です。

SMTPが使う配送用エンベロープの送信者・受信者と、利用者が読むメール本文内のFrom・Toヘッダーは別の情報です。転送、同報、エラー通知、迷惑メール判定では両方を区別します。

メールアプリから投稿し、MXで選んだ中継先を経て受信メールボックスへ配送する一時失敗はキューへ保持して再試行し、恒久失敗は配送不能として扱う
メールアプリが配送用エンベロープと本文を投稿サーバーへ渡し、DNSのメール経路選択から複数SMTP中継を経て受信メールボックスへ届け、一部宛先の拒否、一時失敗のキューと再試行、恒久失敗、区間ごとのTLS保護を示した図解
図1各TLSトンネルは一つのSMTP区間を表します。中継サーバー内での保存や、次区間が同じ保護状態かは別に確認します。

投稿、転送、中継、最終配送でサーバーの責任が変わる

利用者から受け付ける入口と、ドメイン間で配送する入口を分けるどのサーバーが受領責任を引き受けたかを応答コードとログで追う
  1. Submit
    利用者が投稿

    メールアプリが認証付き投稿サービスへ接続し、送信ポリシーと形式検査を受ける

  2. Resolve
    宛先MXを調査

    受信者ドメインのMX優先値とホスト名を調べ、IPアドレスへ解決する

  3. Transfer
    SMTP中継

    宛先サーバーへエンベロープと内容を提示し、受け入れ結果を受け取る

  4. Queue
    一時失敗を再試行

    到達不能や一時拒否ならキューへ保持し、間隔を空けて別MXも試す

  5. Deliver
    メールボックスへ保存

    最終サーバーがローカル受信者へ配送し、POP3・IMAP等から読めるようにする

  6. Report
    恒久失敗を通知

    再試行不能または期限切れ時、可能なら配送状態通知をエンベロープ送信者へ返す

図2受信サーバーがメッセージを肯定応答した後は、そのサーバーが配送または適切な不達処理の責任を引き受けます。

EHLOで機能を知り、エンベロープを確定してから内容を送る

接続後、クライアントはEHLOで自分を名乗り、サーバーはSTARTTLS、SIZE、SMTPUTF8、認証方式など対応拡張を返します。必要ならTLSへ切り替え、投稿用途では利用者を認証します。

MAIL FROMでエンベロープ送信者を、RCPT TOで受信者を一人ずつ提示します。サーバーは受信者ごとに受諾・拒否でき、少なくとも一人を受け入れた後にDATAでヘッダーと本文を送ります。終端行を受けたサーバーの最終応答で、メッセージ全体を受領したか確認します。

エンベロープは配送、From・To・Ccは表示と意味を担う

エンベロープ受信者は実際の配送先で、Bcc受信者もここへ入ります。本文のTo・Ccは表示用ヘッダーで、転送後の表示を保てます。エンベロープ送信者は配送不能通知の返送先で、バウンスを返さない空の送信者もあります。

Fromヘッダーの表示名やアドレスだけでは、送信元サーバーや利用者の本人性を証明できません。SPFはエンベロープ側ドメイン、DKIMは署名、DMARCはFromとの整合など別の認証技術です。メール調査では画面のFromだけでなく、エンベロープ、Received、認証結果を分けて読む必要があります。

2xxは成功、4xxは一時失敗、5xxは恒久失敗として扱う

SMTPの三桁応答は、最初の数字で大きな結果を示します。2xxは要求完了、3xxは追加データ待ち、4xxは後で成功する可能性のある一時失敗、5xxはその要求を同じまま再試行しても成功しない恒久失敗です。

4xxでは送信サーバーがキューへ保存し、間隔を延ばしながら再試行します。期限を超えた場合や5xxでは、配送状態通知を生成することがあります。偽装送信者へ大量の不達通知を返すbackscatterを防ぐため、受信段階で拒否できるものは受領前に拒否します。

ポート25の中継と、利用者のメッセージ投稿を分ける

サーバー間SMTP中継は通常TCPポート25を使います。利用者のメールアプリはmessage submission(メッセージ・サブミッション/メッセージ投稿)としてポート587またはTLSを最初から使う465へ接続し、通常は認証を受けます。

投稿サーバーは差出人アドレス、形式、サイズ、送信制限を利用者向けに補正・検査できます。外部から誰でも任意宛へ中継できる開く中継を作らず、投稿認証とドメイン間受信の許可規則を分けます。

STARTTLSは区間を暗号化するが、メール全経路の終端間暗号化ではない

SMTPのSTARTTLSではEHLO応答で対応を知り、TLSハンドシェイク後にEHLOから会話をやり直します。投稿サービスでは現行設定のTLSを必須にし、証明書名を検証します。サーバー間では機会的TLSも多く、相手が提示しない場合の扱いはポリシー次第です。

一つの中継区間をTLSで守っても、次区間、サーバー内保存、管理者アクセスまでは守りません。MTA-STS、DANE、REQUIRETLSなど配送TLSを強める仕組みもありますが、本文を送信者から受信者まで読めなくするにはS/MIMEやOpenPGPなど内容側の終端間保護が別に必要です。

SMTPはメールを読む機能や、添付形式そのものを定めない

受信済みメールを端末が取得・同期するのはPOP3IMAPの役割です。SMTPは送信・中継方向を担当し、受信者の既読状態やフォルダーを操作しません。

件名、本文、添付、複数言語やバイナリーデータの表現はInternet Message FormatとMIMEが定めます。SMTPUTF8を使う国際化アドレスは、経路上のサーバーが対応する必要があります。アドレスのドメインだけ国際化できる従来形式との違いを確認します。

仕様の確認資料:RFC 5321「Simple Mail Transfer Protocol」RFC 6409「Message Submission for Mail」RFC 8314「Cleartext Considered Obsolete」

関連用語