SMTP(Symple Mail Transfer Protocol)はメールの送信に使われる、その名の通りシンプルなプロトコルです。
telnetを使うことで、メーラーがサーバーとどのような通信をしてメールを送信しているのかが解ります。ここではtelnetを利用してSMTPサーバーに接続し、手動でメールを送信してみましょう。
基本的な設定としては、「ローカルエコー」オン、「漢字コード」JIS漢字、「エミュレーション」VT-100/漢字です。 エンターキーを押下したときに送信するコードを変更できるクライアントをお使いの場合は、CRLFを送るようにしておきます。設定の仕方は[クライアントの設定・基本操作]を参照して下さい。
設定できたら早速つないでみましょう。「接続」―「リモートシステム」を選んで下さい。標準ではSMTPのポート番号は25なので、それを使用します。
ここではOperaMailのSMTPサーバーに接続してみます。
注意:必ずあなたが利用する資格を持ったSMTPサーバーを使用して下さい。その際メールアドレスは間違えずに入力すること。これを誤ると法的な問題等のトラブルの原因となり得ますので、十分注意して下さい。
正しく接続できたら次のように表示されます。
220 operamail.com InterChange ESMTP v3.62 Ready
このようなメッセージが表示されない場合は接続に失敗している可能性があります。ホスト名、ポート番号を確認して再度接続し直して下さい。
SMTPのコマンドです。主なものをここに挙げておきます。斜体の部分は引数、[]の中の引数は省略可能です。
コマンドとその構文 | 意味 |
---|---|
EHLO domain | SMTPサーバーに接続しているクライアントを、クライアントのホスト名(ない場合はIPアドレスなど)によってサーバーに認識させます。ここで入力したホスト名はReceivedフィールドに書き込まれます。 |
MAIL FROM:<sender> | 送信元のメールアドレスを指定します。 |
RCPT TO:<recipient> | 送信先のメールアドレスを指定します。 |
DATA | メールの内容を入力します。"."(ピリオド)だけの行が来ると、入力を終了します。 |
RSET | MAILコマンドで開始されたメール転送処理を中止し、それまでに設定した情報をクリアします。 |
HELP [command] | 役立つ情報を得ます。多くの場合、使用可能なコマンドの一覧が得られます。引数を与えると、引数に対する詳しい情報を得られることもあります。 |
NOOP | 何もしません。タイムアウトにならないよう接続を維持しておきたい時や、接続、サーバーの動作の確認などに使います。 |
QUIT | コネクションを切断します。 |
サーバーは、RCPTコマンドから送信先がどこなのかを割り出します。 送信先が自分自身であればローカルのメールボックスに配信し、そうでなければMXレコードに従ってメールを別のMTAに転送します。
送信先が複数の場合は、RCPTコマンドを繰り返す必要があります。
メールアドレスやメールの本文を間違えた時は、RSETコマンドで取り消し、再びMAILコマンドからやり直します。
SMTPについてはRFC 2821に書かれています。 SMTPについてもっと詳しく知りたい人はご覧になってみて下さい。
では実際にはどういう風になるのか、流れを示したいと思います。
まず接続します。DOSプロンプト等から[クライアントの設定・基本操作]で示した手順でtelnetを起動させ、接続して下さい。接続に成功すると次のようなメッセージが表示されます。
220 operamail.com InterChange ESMTP v3.62 Ready
まずは下のように打って、サーバーに自己紹介(グリーティング)をします。
EHLO ocn.ne.jp
250-Ok, hello ocn.ne.jp.
250-8BITMIME
250-DSN
250-SIZE 8388608
250 HELP
EHLOコマンドはSMTPサーバーに接続している自分のホスト名を引数に取ります。 具体的には"ocn.ne.jp"の部分です。ここは適当にしないように。ここで書いたホスト名は、メールヘッダのReceivedフィールドに書き込まれます。
MAIL FROM:<muller@operamail.com>
250 <muller@operamail.com> ... Sender Ok
RCPT TO:<muller@csc.jp>
250 <muller@csc.jp> ... Recipient Ok (will forward)
続いてMAILコマンドで送信元(今は自分)のメールアドレスを指定します。ここでは"<muller@operamail.com>"がそれに当たります。 その後RCPTコマンドで送信先のアドレスを指定します。ここでは"<muller@csc.jp>"です。
DATA
354 Ok, end with "." on a new line...
Subject: Send a mail with telnet client as MUA.
From: muller@operamail.com
To: muller@csc.jp
This is a test mail sent with telnet client.
I hope you'll return me soon so I can know the mail I send is delivered safely.
.
250 Message delivered to 1 recipients
QUIT
221 operamail.com InterChange ESMTP v3.62 closing connection.
DATAコマンドでメールの内容の書き込み開始を伝えます。その後は好きなことを書いて下さい。ただしtelnetで送る場合には、半角英数字以外は使わない方が無難です。 理由については、@ITのフォーラム、「連載 インターネット・プロトコル詳説」の第3回 メールにかけられた呪文「MIME〜前編」及び第4回 「MIME〜後編」を参照して下さい。最後に"."(ピリオド)だけの行を送ると、そこで入力が終了となります。
そしてQUITコマンドを実行すると接続が切れ、メールが送信されます。
普段は気にせず使っていますが、メーラーはこのようなやりとりをSMTPサーバーとの間で交わしてメールを送信しているのです。
注目すべきは、次章の[telnetでメールを受信する]を読めば気付くかと思いますが、SMTPには認証のプロセスがないことです。 SPAMメールの被害が拡大している背景には、このように第三者によるサーバーの不正利用を許してしまうSMTPの仕様があります。
最近ではSMTPに認証機能を取り入れたSMTP-AUTHや、POP before SMTP等の仕組みを採用するサーバーも増えています。 とは言え、そうでないサーバーもまだまだたくさんあります。
あなたも手動でメールを送るときには注意しないと、不正利用者と間違えられるかもしれません。 「接続」の項に書いた注意をよく読んで、タイプミスには気を付けましょう。