MTA 間のメール転送に使われる通信プロトコルが SMTP (Simple Mail Transfer Protocol)である。 多くの MUA (特に,Windows 上のMUA のほとんどすべて) は, MTA にメールを送信するときも SMTP を使う。 SMTP による通信の例を,図 2 に示す。
これは,telnet プログラムを使って,あて先の MTA へメールを送信したものだ。 1,3,5 行目など,3 桁の数字で始まっている行が, あて先の MTA からの返事である。 それ以外の行は,こちらからの送信である。
SMTP では送信側 (SMTP クライアント) がコマンドを送り, 受信側 (SMTP サーバー) がそれに対して 3 桁の返答コードを返す仕組みになっている。 返答コードの後に,「ok 」とか「go ahead」などの文字が続いているが, これらは人間にとって分かりやすくするために付けているだけで, MTA にとっては何の意味も持たない。
ozenji:/home/sengoku % telnet mx.gcd.org smtp Trying 210.161.209.178... Connected to mx.gcd.org. Escape character is '^]'. 1 220 toyokawa.gcd.org ESMTP 2 HELO ozenji.gcd.org 3 250 toyokawa.gcd.org 4 MAIL FROM:<postmaster@gcd.org> 5 250 ok 6 RCPT TO:<sengoku@gcd.org> 7 250 ok 8 DATA 9 354 go aheado 10 Subject: test 11 From: postmaster@gcd.org 12 To: sengoku@gcd.org 13 Date: Sat, 01 Jan 2000 00:01:02 +0900 14 15 仙石です。これは SMTP 説明用のテストメールです。 16 17 #5403. 仙石 浩明 18 http://www.gcd.org/sengoku/ Hiroaki Sengoku <sengoku@gcd.org> 19 . 20 250 ok 946177353 qp 13960 21 QUIT 22 221 toyokawa.gcd.org Connection closed by foreign host.
図 2 SMTP による通信の例
返答コードは,百の位の数字によって大きく 3 つに分類できる (表1)。 頻繁に出てくる「250」は「Requested mail action okay, completed (要求されたメール動作は承認,完了した)」を表す。
表 1 返答コード | |||||||||
コード | 内容 |
2xx | 受信側 MTA の状態 |
3xx | 受信側 MTA から送信側 MTA へのリクエスト |
4xx | 一時的なエラー,送信側 MTA は後で再送することが望ましい |
5xx | 恒久的なエラー,送信側 MTA は再送を試みるべきではない |
返答コードの完全なリストは, SMTP を定義しているRFC821 *3 で定められているので参照してほしい *4。
送信側が送るコマンドには主に表 2 のものがある。
表 2 送信側が発行するコマンド | |||||||||||
コマンド | 内容 |
HELO ドメイン | まず送信側が名乗りをあげる |
MAIL FROM:<送信者> | 送信者のアドレスを伝える |
RCPT TO:<受信者> | 受信者のアドレスを伝える |
DATA | これからメール本体を送ります,という宣言。 メールの終りは,「.」だけの行 |
QUIT | 終了 |
DATA に続けて送るメール本体は, 本文だけでなくメール・ヘッダーを含む。 ここで注意すべきなのは, SMTP においてはメール・ヘッダーは何の意味も持っていない, ということである。 ヘッダには「From:」や「To:」など送信者や受信者を示すフィールドがあるが, ヘッダの内容と「MAIL FROM:」「RCPT TO:」コマンドの内容が 必ずしも一致する必要はない。 両者を区別するために, 後者を「エンベロープ送信者」「エンベロープ受信者」などと呼んだりする。 「エンベロープ」とは「封筒」の意味である。
% nslookup -q=mx gcd.org. Server: toyokawa.gcd.org Address: 210.161.209.178 Aliases: 178.209.161.210.in-addr.arpa gcd.org preference = 10, mail exchanger = mx.gcd.org gcd.org nameserver = ns.gcd.org gcd.org nameserver = brother.daio.net gcd.org nameserver = ns-tk012.ocn.ad.jp mx.gcd.org internet address = 210.161.209.178 ns.gcd.org internet address = 210.161.209.178 brother.daio.net internet address = 210.167.164.35
図 3 nslookup コマンドで、あて先 MTA を調べる
ここではあて先 MTA としてmx.gcd.org へ接続しているが, 送信側 MTA があて先 MTA を探すには DNS (Domain Name System) を使う。 例えば,受信者アドレスが gcd.org のメールを送信するあて先 MTA は, 図 3 のように nslookup コマンドを使って調べられる。 ここで「mail exchanger」があて先 MTA であり, gcd.org の場合は mx.gcd.org であることが分かる。
本稿は日経Linux 2000 年 3 月号に掲載された、 特集 2: 高性能メール配送エージェント qmail 徹底活用, Part 1「sendmail を捨て, qmail に乗り換える ---qmail の仕組みから設定管理, 迷惑メール対策まで---」を日経BP 社の許可を得て転載したものです。
Copyright(C)2000 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます