もくじへ

MTAと話そう〜SMTPについて

MTA。 普段、電子メールを使っていてもおそらく意識したことはおろか、 聞いたこともない、という人も多いかと思います。 このページでは、 そのMTAとSMTPという方法を用いて直接お話してみることで 電子メールの配送についての理解を深めるとともに、 トラブルが発生したときに解消する助けとなるような技術を身につける ことを目的として書かれています。 実際に自分でも試しながら読んで頂けると幸いです。

接続してみよう

メールはMTAからMTAへと転送されることで配送される、ということは イントロダクションで述べました。 問題はどうやってメールをやりとりするか、ということですが、 メールを受け取れるマシンのMTAは、他のマシンのMTAがメールを持ってくるのを 待っています。 そこで、その待っているMTAと直接お話すればいろいろなことがわかるはずです。 ここで、MTAと直接話をすることを「SMTPに接続する」といいます。

では、SMTPに接続することから始めてみましょう。 読みやすくするために、メールサーバーを mail.puni.net 、自分の アカウントを mimori だとします。 メールアドレスは mimori@puni.net です。

実際に試すときには、メールサーバーはプロバイダやネットワーク管理者 から教えてもらったものを、またアカウントも自分自身のものを 使って下さい。 とにかく、SMTP に接続してみましょう。 telnet でポート番号を25にしてメールサーバーに接続して下さい (具体的な方法が分からない人は こちら)。

お話のしかた

さて、ここでSMTPを使ってMTAと話をするわけですが、始まりと終わりの 「おまじない」を覚えておきましょう。

HELO [domain]
始まり(helloの略)
QUIT
おしまい
[domain] のところには自分の所属するドメイン名を入れます。 良く分からなかったら、自分のメールアドレスの「@」より後ろの部分を 入れておけばたいていの場合大丈夫でしょう。 この場合、メールアドレスは mimori@puni.net ですから、 domain には puni.net を入れておけばよさそうです。 なお、すべてのコマンドはASCII文字(いわゆる半角英数字)で入れて下さい。 大文字、小文字はどちらでも結構です(混ざっていてもOK)。

HELO puni.net

さて、始まりの呪文が終わったら、次はメールを出してみましょう。

MAIL
送信者のアドレス(Envelope From)の設定
RCPT
宛て先のアドレス(Envelope To) の設定
DATA
メール(ヘッダと本文)
もしも送り先のアドレスを間違えたりした場合にはエラーメールが返送 されてきますが、その返送先は MAIL で指定した Envelope From あて となります。 なお、MAIL は実際には MAIL From: (アドレス)の様に使います。

また、RCPT で指定した宛て先が実際にメールを送付する先になるので、 (たいていの)メーリングリストの場合の様に To がメーリングリスト 投稿先アドレスのままであっても、実際にはメンバーそれぞれに 配られる、ということができます。なお、RCPT は実際には RCPT To: (アドレス)と使います。 なお、この2つのアドレスは<>で囲むようにします。

メールはDATA の後に書きます。 全体像の中でも書きましたが、 普通見えるヘッダもすべてメールの一部です。 ヘッダについては別のページに説明されています。 ヘッダと本文との間に空行(リターンだけの行)をおくことを忘れずに。 なお、これらのコマンドは上に書いた順番通りに実行してください。

「.」(ピリオド)1つだけの行 (スペースなどもあってはいけません)がメール終わりの合図ですから メールを書きおわったら最後に「.」(ピリオド)1つだけの行を つけて下さい。 なお、ピリオド1つだけの行をメールにして送りたい時には 「..」としてあげます。ピリオド2つの行なら「...」の様に、 ピリオドだけの行についてはピリオドを1つ余計につけるようにします。

では、やってみましょう。 ここではメールの送り先を sakura@puni.net にしてみます。 実際には sakura@puni.net のかわりに自分のアドレスや友達のアドレス (こういう実験をやっていいかどうか前もって許可をもらっておいて 下さい)でやってみてください。 最後に QUIT するのも忘れないように。 なお、青い文字は各操作の説明です。

MAIL From: <mimori@puni.net> 差出人のアドレス
RCPT To: <sakura@puni.net> 送り先のアドレス
DATA
Date: 07 Dec 1998 21:22:23 +0900 まずはヘッダ。送信日時
From: test1@puni.net ヘッダのFrom
Subject: Test mail
To: test2@puni.net ヘッダのTo
Message-ID: <19981207212223.mimori@mail.puni.net> Message-ID は他のメールと同じにならないよう設定する

Konnichiwa. ここから本文(body)
Ogenki desuka?
. メール終わり
QUIT

以上の操作をすると、このような画面になります。 なお、これは一例です。 使っている環境によってはSMTPやPOPがヘッダを追加したりすることも あるかもしれませんが、これは実装や設定のポリシーによるものですので ここでは触れません。

SMTP

これによって、sakura@puni.net さんにはこんなメールが届くはずです。

Mail

もし、大勢に同じメールを送りたいときには、送り先ごとにRCPT を書きます。

MAIL From: <sakura@puni.net> 差出人
RCPT To: <ukito@puni.net> 送り先1
RCPT To: <mimori@puni.net> 送り先2
RCPT To: <mimori@yo.rim.or.jp> 送り先3
DATA
Date: 08 Dec 1998 02:15:12 +0900
From: mimori@puni.net
Subject: Test mail
To: mimori@yo.rim.or.jp
Message-ID: <19981208021512.sakura@mail.puni.net>

Konnichiwa.
Ogenki desuka?
.
QUIT

こうすると3人に同じメールが送られます。 ヘッダに書かれていない相手にもメールが届くことに注意。 このように、実際にメールをどこに届けるかを決めているのは ヘッダの To や Cc ではなく、RCPT To: の中身なのです。

あともう1つ、便利なコマンドについて説明しましょう。 VRFYというコマンドはメールアドレスを確かめる(verify)コマンドです。 例えば

VRFY mimori

とすると、mimoriというメールアドレスがそのマシンにあるかどうか 調べてくれます。もし存在すれば 250 <mimori@...>、 なければ 500 mimori... User unknown などと表示されます。 また、

EXPN mimori

とすると、mimoriというメールアドレスが、実際にどのように展開されるか (別のホストに転送されるなど)までわかります。ただし、近年では、これらの 機能をセキュリティ上の問題であると感じる人も多くなってきているので、使 える保証はありません。

ここでは7つしかコマンドの説明をしませんでしたが、 実際にはもっとたくさんのコマンドがあります。 興味のある人は rfc821rfc1123の5、 rfc1869 を参照してみて下さい。

しかし、ここにあげたコマンドを理解するだけでたいていの ことは出来ます。

補足

必要なヘッダが足りない場合、MTA(正確にはMSA: Message Submissition Agent) はそれを補うことができます (RFC2476)。

←イントロダクション ↑もくじへ → メールを取りにいこう〜POPのしくみ〜



Mimori Yuki <mimori@puni.net>
$Id: smtp.html,v 1.7 2001/06/15 19:59:10 s-v Exp s-v $