Simple Mail Transfer Protocol(簡易
メール転送
プロトコル、
SMTP)は、
インターネットで
電子メールを転送する
プロトコルである。通常
TCP の
ポート番号 25 を利用する。転送先の
サーバを特定するために、
DNS の MX
レコードが使われる。
RFC5321で標準化されている。
概要
SMTP は
IETF において標準化された
メール転送のための
プロトコルである。1980年 9 月に
メール転送
プロトコル (Mail Transfer Protocol) という名称の
プロトコルが
RFC 772 において提案され、2 回の改訂を経て 1982年 8 月に簡易
メール転送
プロトコル (
SMTP) という名称で
RFC 821 /
STD0010 (J. B. Postel 著: Simple Mail Transfer Protocol) として標準 (Standard) になった。その後 2001年 4 月に
SMTP は他の
RFC の内容もあわせて改訂され、
RFC 2821 (J. Klensin 編: Simple Mail Transfer Protocol) として提案標準 (Proposed Standard) になった。
RFC 821 から約 20 年を経て改訂版が発
行されたのは、おもに
インターネットの普及にともなって様々な
メール拡張機能が
実装され、それらをささえる部分を整理する必要があったからである。サーバー外からの攻撃や、
IPv6のアドレスにも対応できるよう、また
SPF (
RFC 4408)、
DKIM (
RFC 4686) などにも対応すべく 2008年10月に再度改訂された。
SMTP は
メールサーバの
MTA 間の転送だけでなく、
MUA から
メールサーバに
メールを送信するときにも使われることが多い。ただし、この場合受信した
サーバ側のふるまいが
サーバ同士の転送と異なる点が多いため、
サーバ側を MSA と呼び
ポート番号 587 を利用し、通常の
MTA と分けることが多くなってきている (
RFC 5321で
RFC 4409が推奨になった)。
SMTP は本来テキストベースの
プロトコルであり、要求/応答メッセージのみではなく、全ての文字が 7 bit
ASCII でなければならないという制限があった。現在では拡張機能により 8 bit 以上を要求する言語や
添付ファイルに使われることの多い
バイナリもそのまま転送することも可能であるが、互換性を考慮すると、
MIME という方式で、7 bit に収まるようにすることが望ましい。なお、日本語は通常
ISO-2022-JP という
文字コードを使うことで、全ての
バイトが 7 bit に収まるようにしている。
SMTP においては
サーバと
クライアントの役割が明確に分離されている。
RFC 5321 によれば、それらは下図のように記述される。
+
+ +
-+ +
-+ | User |<-->| | | | +
+ | | SMTP | | | Client- | Commands/Replies | Server- | +
+ | SMTP |<
>| SMTP | +
+ | File |<-->| | and Mail | |<-->| File | | System | | | | | | System | +
+ +
-+ +
-+ +
+ SMTP client SMTP server
SMTP においては
クライアントが
サーバに接続するとただちに
サーバ-
クライアント間に "
SMTP セッション" が確立され、その後、両者の間で
コマンドやそれに対する応答や
メールがやりとりされる。
SMTP セッション中には複数の
メール・
トランザクションがふくまれうる。
セッションの確立のためにメッセージ送受信をともなわない点では
SIP や
RTSP とはことなっている。
セッションの終了のためには QUIT
コマンドが使用されるが、これが
SIP でいえば BYE メッセージに対応している。
SMTP においてはトランスポート・
プロトコルとして通常
TCP が使用されるが、それに限定されることはない。