Kodama's home / tips.

手動で SMTP プロトコル を実行する/メールヘッダの読み方

手動で SMTP プロトコル を実行する

(RFC 5321 SMTP 参照) メールを書いて送信すると, サーバ間でリレー式にそのメールを受け渡していって, 受取人がユーザ登録してあるメールサーバに届けられます. そのときに, サーバ間の受渡しで使われるのが SMTP(Simple Mail Transfer Protocol) です. 通常は sendmain, postfix, qmail のような MTA(Mail Transfer Agent) が行っていることですが, telnet を用いて手動で行ってみましょう.
以下では サーバ mail.send.ac.jp から, サーバ mail.receive.ac.jp に, 差出人 test-from@send.ac.jp, 受取人 test-rcpt@receive.ac.jp, のメールを引き継いでいます.

使用する SMPT コマンドは5種類: HELO , MAIL FROM: , RCPT TO: , DATA , QUIT

$ telnet mail 25      : 25 が SMTP ポート
220 mail.receive.ac.jp ESMTP Postfix (Debian/GNU)        :受信サーバ名がかえって来る
HELO mail.send.ac.jp               :送信サーバ名を送る
250 mail.receive.ac.jp              :受信サーバ名がかえって来る
MAIL FROM: <test-from@send.ac.jp>     :送り主メールアドレスを送る
250 2.1.0 Ok
RCPT TO: <test-rcpt@receive.ac.jp>    :受取人メールアドレスを送る
250 2.1.5 Ok
DATA                                :以下メール本文
354 End data with .
test
test test
test test test
.                                   :"." で本文の終わり
250 2.0.0 Ok: queued as 759841BBF2
QUIT                                :接続終了
221 2.0.0 Bye
Connection closed by foreign host.
$ 

メールヘッダ

メールヘッダを見ると, メールを送る途中のサーバ間の受渡しの様子を調べることができます. サーバのメールを受け渡す段階ごとに以下のような内様が書き込まれてゆきます. ここに書かれたサーバ名を追ってゆくとメールを運んだ経路がわかります. また, 時刻を追ってゆくと, メールの滞留の様子などがわかります. 滞留時間などを見るには, サーバ間の時計が揃っている必要があります. NTP で時刻を合わせておくと良いでしょう.
Received: from mail.send.ac.jp (mail-x.send.ac.jp [10.20.30.40])
	by mail.receive.ac.jp (Postfix) with ESMTP id 2D2B71BBF9
	for <test-rcpt@receive.ac.jp> Thu, 17 Apr 2008 12:19:05 +0900 (JST)

以下では, 前節の "SMTP プロトコル" と対応させて, ヘッダの読み方を見てみましょう. ヘッダ部分の書き方はサーバの種類によって多少異なります.

postfix の例

Return-Path: <sender@sender.ac.jp>
         : MAIL FROM の送り主メールアドレス 
Received: from mail.send.ac.jp (mail-x.send.ac.jp [10.20.30.40])
         : HELO に見える送信サーバ名(アドレスから DNS で引いた名 [送信サーバアドレス])
	by mail.receive.ac.jp (Postfix) with ESMTP id 2D2B71BBF9
         : 受信サーバ名
	for <test-rcpt@receive.ac.jp>; Thu, 17 Apr 2008 12:19:05 +0900 (JST)
         : MAIL TO 受取人 と  時刻

qmail の例

Received: from mail-x.send.ac.jp (HELO mail.send.ac.jp) (10.20.30.40)
        : アドレスから DNS で引いた名(HELOに見える送信サーバ名) (送信サーバアドレス)
  by mail.receive.ac.jp  with SMTP; 17 Apr 2008 12:19:05 +0900
        : 受信サーバ名 と  時刻


Kodama's home / tips.