sendmail を捨て,qmail に乗り換える

──qmail の仕組みから設定管理,迷惑メール対策まで──


メール配送の仕組み / SMTP を理解する

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終了
*3【RFC】
Request For Comments の略。 一般には,TCP/IP の規格書として知られている。 RFC はインターネットを通じて入手できる。 RFC には一つひとつ通し番号が付与されている。 たとえば,IP の標準に関する文書は RFC 791,TCP のそれは RFC 793 である。 RFC には,こうしたインターネットで使うプロトコルやサービスについて 詳細に記述した文書のほかに, それらに対するコメント, 各プロトコルの標準化状況をまとめた文書などがある
*4
RFC821 はhttp://www.ietf.org/rfc/rfc0821.txt を参照。

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 であることが分かる。

(時代遅れの MTA ――sendmail)


本稿は日経Linux 2000 年 3 月号に掲載された、 特集 2: 高性能メール配送エージェント qmail 徹底活用, Part 1「sendmail を捨て, qmail に乗り換える ---qmail の仕組みから設定管理, 迷惑メール対策まで---」を日経BP 社の許可を得て転載したものです。

Copyright(C)2000 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます

| home | up |

sengoku@gcd.org