TCP/IP、SMTP

システム・プログラム

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/classes/syspro-2003/2003-05-19 /smtp.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.is.tsukuba.ac.jp/~yas/index-j.html

◆SMTP

SMTP (Simple Mail Transfer Protocol) とは、電子メールの転送を行うため のプロトコルである。このプロトコルは、MTA (Mail Transfer Agent) と呼ば れるプログラムの間で電子メールを配送したり、MTA と MUA (Mail User Agent) と呼ばれるプログラムの間で電子メールを差し出す時に使われる。MTA の例としては、UNIX 上で動作するsendmailと呼ばれるプログラムがあげられ る。MTA は、一方が SMTP サーバ、もう一方が SMTP クライアントとなり、電 子メールを転送する。表6に、SMTPで定義されている要求、表7に応答を示す。

表6 SMTPで定義されている手続き


--------------------------------------------------------------------
MAIL FROM:<reverse-path>
	新しいメールの転送を開始する。
	<reverse-path>は、エラーが起きた時の送り返し先のアドレス。


RCPT TO:<forward-path>
	メールの送り先として <forward-path> を指定する。

DATA
	メールのデータを送り始める。

VRFY	<login-name>
	メールの受け手を確認する。

EXPN	<ml-name>
	メーリング・リストの受取人を表示する。

SEND FROM:<reverse-path>
	メールを転送する。

HELO <domain>
	最初に接続した時に自分自身を相手に知らせる。

QUIT
	接続を切る。
--------------------------------------------------------------------

表7 SMTPの応答コード

--------------------------------------------------------------------
コード	説明
--------------------------------------------------------------------
220	 というドメインで要求受け付け可能である。
250	そのアドレスへのメールは、受け付け可能である。
251	そのアドレスは、ローカルには受取人がいない。
--------------------------------------------------------------------

以下に、SMTP で電子メールが出される様子を示している。

----------------------------------------------------------------------
% mail -v yas@is.tsukuba.ac.jp [←]
Subject: hello[←]
body[←]
.[←]
Cc:[←]
yas@is.tsukuba.ac.jp... Connecting to orchid-a.coins.tsukuba.ac.jp. via relay...
220 orchid-a.coins.tsukuba.ac.jp ESMTP Sendmail 8.11.6/8.11.6; Mon, 27 May 2002 01:39:38 +0900
>>> EHLO adonis9.coins.tsukuba.ac.jp
250-orchid-a.coins.tsukuba.ac.jp Hello adonis9.coins.tsukuba.ac.jp [130.158.86.29], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE 5242880
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
>>> MAIL From: SIZE=46
250 2.1.0 ... Sender ok
>>> RCPT To:
250 2.1.5 ... Recipient ok
>>> DATA
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 g4QGdcw19542 Message accepted for delivery
yas@is.tsukuba.ac.jp... Sent (g4QGdcw19542 Message accepted for delivery)
Closing connection to orchid-a.coins.tsukuba.ac.jp.
>>> QUIT
221 2.0.0 orchid-a.coins.tsukuba.ac.jp closing connection
% []
----------------------------------------------------------------------
この例では、mail コマンドが、/usr/sbin/sendmail を呼び出している。画面 には、ローカルの /usr/lib/sendmail コマンドと、 orchid-a.coins.tsukuba.ac.jp 上のsendmail サーバSMTP によるやり取りが 表示されていいる。これは、mailコマンドに与えた -v (verbose) オプションの効果である。

>>> の次に現われているものが、SMTPの要求で、 送信側のホスト adonis9 の sendmail の出力である。数字で 始まっている所が、受信側の orchid-a の sendmail の応答で ある。このように、SMTP では、2つのプログラムが対話をして、電子メール を転送する。

上の対話には、現われていないが、DATA の後に 電子メールの本文が送られている。ここで本文には、 From:, To:, Subject: など のヘッダも含まれている。

本文の From:To: は、電子メールの転送に は使われない。 転送には、表?に出てくるMAIL FROM:RCPT TO: に続くアドレスが使われる。この、 SMTP のレベルの、配送に使われるデータを、本文と区別して 封筒 (envelope) と呼ぶ。

SMTP() で DATA の中に出てくるTo: と、 RCPT TO: は、多くの場合一致している。しかし、メーリン グ・リストのメールや、.forward で転送されたメールでは、一致して いない。すなわち、メーリング・リストや.forward がうまく働くのは、 封筒に書かれた宛先が使われていることによる。

★ telnetによるメール発信

telnet を使って、電子メールを送るサーバに接続して、SMTPのコマンドを打 ち込み、電子メールを送ってみなさい。SMTP の定義は、RFC821 というドキュ メントにある。mail -v の結果を参考にするとよい。DATA は、To: 行を含め ることを忘れないようにしなさい。

★ SMTPクライアントの作成

SMTPサーバに対して、電子メールを発信するプログラムをつくりなさい。その プログラムの名前を、smtpput とする。

mverify コマンドは、次のように3つの引数を与えて利用するものとする。

--------------------------------------------------------------------
% ./smtpput host from@coins.tsukuba.ac.jp to@coins.tsukuba.ac.jp [←]
body[←]
^D
% []
--------------------------------------------------------------------
ここで、host は、SMTPサーバ(sendmailデーモン)が動いているホストの名前 である。from@coins.tsukuba.ac.jp は、SMTP の MAIL FROM: で与えるアドレス(自分自身のアドレス)である。 to@coins.tsukuba.ac.jp には、SMTP の RCPT To: で指定する受取人のアドレスを指定する。実験では、これも自分自身のアドレ スを使う。

電子メールの本文は、標準入力(キーボード、または、ファイルやパイプ)から 与える。

上の例の場合、DATA には、次のようなデータを指定する。

DATA
From: from@coins.tsukuba.ac.jp
To: to@coins.tsukuba.ac.jp

body
.

プログラムをつくる時には、行末の扱い(CR-LF)に注意 しないさい。


Last updated: 2003/05/19 00:00:03
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>