システム・プログラムI 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro1-1998/1998-06-02
/smtp.html
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
表6 SMTPで定義されている手続き
-------------------------------------------------------------------- MAIL FROM:新しいメールの転送を開始する。 は、エラーが起きた時の送り返し先のアドレス。 RCPT TO: メールの送り先として を指定する。 DATA メールのデータを送り始める。 VRFY メールの受け手を確認する。 EXPN メーリング・リストの受取人を表示する。 SEND FROM: メールを転送する。 HELO 最初に接続した時に自分自身を相手に知らせる。 QUIT 接続を切る。 --------------------------------------------------------------------
表7 SMTPの応答コード
-------------------------------------------------------------------- コード 説明 -------------------------------------------------------------------- 220以下に、telnet コマンドを利用して、SMTP サーバ(sendmail)に接続した様 子を示す。というドメインで要求受け付け可能である。 250 そのアドレスへのメールは、受け付け可能である。 251 そのアドレスは、ローカルには受取人がいない。 --------------------------------------------------------------------
-------------------------------------------------------------------- 1: % telnet host1 smtpYHM_CR() ^^^^^^^^^^^^^^^^^^ 2: Trying XXX.YYY.ZZZ.UUU ... 3: Connected to host1. 4: Escape character is '^]'. 5: 220 aaa.bbb.ccc.ac.jp Sendmail XXXXX ready at Fri, 8 Sep 1995 00:25:05 +0900 6: vrfy root^^^^^^^^^^^ 7: 250 <root@aaa.bbb.ccc.ac.jp> 8: quit
^^^^^^ 9: 221 aaa.bbb.ccc.ac.jp closing connection 10: Connection closed by foreign host. 11: %
--------------------------------------------------------------------
ここで、下線(^^^^)で示した部分が、キーボードからのタイプである。この 例では、ホスト host1 のポート番号 25 (smtp) のポートに、TCP/IPにより接 続を試みている。2行目から4行目は、telnet コマンドによる定型的な表示で ある。ここで、通信路が開設されている。すると、サーバは、220 という応答 を返している。これは、SMTP で定義されている応答であり、サーバが、コマ ンド要求を受け付け可能であることを意味している。
第6行では、"vrfy" (verify) というコマンドをサーバに送っている。これに 対して、サーバは、250 という応答に続けて、電子メールのアドレスを返して いる。
次に、8行において、"quit" というコマンドをサーバに送っている。これに対 してサーバは、221 という応答を返し、続いて TCP/IP の通信路を切断してい る。10行目は、telnet コマンドが生成したメッセージである。
自分の電子メールを蓄えているホストと、そうではないが電子メールを発信す ることができるホストで、次のようにして、電子メールが発信される様子を観 察しなさい。
ここでは、電子メールのデータ(DATAの部分)は、表示されない。ここでデー タとは、To: 行や From: 行などのヘッダも含む。SMTP のレベルにおいては、 データの部分の To: 行は、配送には使われない。その代わりに、SMTP で定義 されている RCPT が使われる。% /usr/lib/sendmail -v yasTo: yas Subject: hello body ^D
telnet を使って、電子メールを送るサーバに接続して、SMTPのコマンドを打 ち込み、電子メールを送ってみなさい。SMTP の定義は、RFC821 というドキュ メントにある。mail -v の結果を参考にするとよい。DATA は、To: 行を含め ることを忘れないようにしなさい。
SMTPサーバに対して、VRFY 手続きを送り、受取人のアドレスを確認するプロ グラムを作りなさい。そのプログラムの名前を、mverify とする。
mverify コマンドは、次のように2つの引数を与えて利用するものとする。
ここで、host は、SMTPサーバ(sendmailデーモン)が動いているホストの名前、 who は確認するアドレスである。SMTPプロトコルで用いられる標準のポート番 号は、25(smtp) である。これは、getserverbyname() で求めるとよい。-------------------------------------------------------------------- % ./mverify host who--------------------------------------------------------------------
報告書には、作成した mverify コマンドの動作例を示しなさい。SMTPサーバ (sendmail daemon)が動いているホストとしては、自分が利用しているメール・ サーバを指定しなさい。そして、次のように自分のアドレスを確認してみなさい。
-------------------------------------------------------------------- % ./mverify host1 $USER--------------------------------------------------------------------