TCP/IP、SMTP

システム・プログラム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

◆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:
	新しいメールの転送を開始する。
	は、エラーが起きた時の送り返し先のアドレス。


RCPT TO:
	メールの送り先として  を指定する。

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

VRFY	
	メールの受け手を確認する。

EXPN	
	メーリング・リストの受取人を表示する。

SEND FROM:
	メールを転送する。

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

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

表7 SMTPの応答コード

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

以下に、telnet コマンドを利用して、SMTP サーバ(sendmail)に接続した様 子を示す。

--------------------------------------------------------------------
  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 コマンドが生成したメッセージである。

★ telnet コマンドによる SMTP サーバへのアクセス

telnet コマンドを使って、自分の電子メールを蓄えているホストにアクセス し、自分のログイン名と存在しないログイン名について、VRFY で調べてみな さい。

★ telnet コマンドによる SMTP サーバへのアクセス

telnet コマンドを使って、自分の電子メールを蓄えているホストにアクセス し、自分のログイン名と存在しないログイン名について、VRFY で調べてみな さい。

★ /usr/lib/sendmail によるメール発信の観察

自分の電子メールを蓄えているホストと、そうではないが電子メールを発信す ることができるホストで、次のようにして、電子メールが発信される様子を観 察しなさい。

% /usr/lib/sendmail -v yas [←]
To: yas
Subject: hello 

body
^D
ここでは、電子メールのデータ(DATAの部分)は、表示されない。ここでデー タとは、To: 行や From: 行などのヘッダも含む。SMTP のレベルにおいては、 データの部分の To: 行は、配送には使われない。その代わりに、SMTP で定義 されている RCPT が使われる。

★ telnetによるメール発信

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

★ SMTPクライアントの作成

SMTPサーバに対して、VRFY 手続きを送り、受取人のアドレスを確認するプロ グラムを作りなさい。そのプログラムの名前を、mverify とする。

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

--------------------------------------------------------------------
% ./mverify host who [←]
--------------------------------------------------------------------
ここで、host は、SMTPサーバ(sendmailデーモン)が動いているホストの名前、 who は確認するアドレスである。SMTPプロトコルで用いられる標準のポート番 号は、25(smtp) である。これは、getserverbyname() で求めるとよい。

報告書には、作成した mverify コマンドの動作例を示しなさい。SMTPサーバ (sendmail daemon)が動いているホストとしては、自分が利用しているメール・ サーバを指定しなさい。そして、次のように自分のアドレスを確認してみなさい。

--------------------------------------------------------------------
% ./mverify host1 $USER [←]
--------------------------------------------------------------------


↑[もどる] [課題提出方法] ←[5月26日] ・[6月2日] →[6月9日]
[finger] [http] [nntp] [smtp]
Last updated: 1998/06/02 00:50:03
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>