システム・プログラム 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro-2002/2002-05-27
/smtp.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
表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以下に、SMTP で電子メールが出される様子を示している。というドメインで要求受け付け可能である。 250 そのアドレスへのメールは、受け付け可能である。 251 そのアドレスは、ローカルには受取人がいない。 --------------------------------------------------------------------
この例では、mail コマンドが、/usr/sbin/sendmail を呼び出している。画面 には、ローカルの /usr/lib/sendmail コマンドと、 orchid-a.coins.tsukuba.ac.jp 上のsendmail サーバSMTP によるやり取りが 表示されていいる。これは、mailコマンドに与えた---------------------------------------------------------------------- % mail -v yas@is.tsukuba.ac.jpSubject: 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 % ----------------------------------------------------------------------
-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 を使って、電子メールを送るサーバに接続して、SMTPのコマンドを打 ち込み、電子メールを送ってみなさい。SMTP の定義は、RFC821 というドキュ メントにある。mail -v の結果を参考にするとよい。DATA は、To: 行を含め ることを忘れないようにしなさい。
SMTPサーバに対して、電子メールを発信するプログラムをつくりなさい。その プログラムの名前を、smtpput とする。
mverify コマンドは、次のように3つの引数を与えて利用するものとする。
ここで、host は、SMTPサーバ(sendmailデーモン)が動いているホストの名前 である。-------------------------------------------------------------------- % ./smtpput host from@coins.tsukuba.ac.jp to@coins.tsukuba.ac.jpbody
^D %
--------------------------------------------------------------------
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)に注意 しないさい。