Use telnet



telnetでメールを送信する

SMTP

SMTP(Symple Mail Transfer Protocol)はメールの送信に使われる、その名の通りシンプルなプロトコルです。

telnetを使うことで、メーラーがサーバーとどのような通信をしてメールを送信しているのかが解ります。ここではtelnetを利用してSMTPサーバーに接続し、手動でメールを送信してみましょう。

接続

基本的な設定としては、「ローカルエコー」オン、「漢字コード」JIS漢字、「エミュレーション」VT-100/漢字です。 エンターキーを押下したときに送信するコードを変更できるクライアントをお使いの場合は、CRLFを送るようにしておきます。設定の仕方は[クライアントの設定・基本操作]を参照して下さい。

設定できたら早速つないでみましょう。「接続」―「リモートシステム」を選んで下さい。標準ではSMTPのポート番号は25なので、それを使用します。

ここではOperaMailSMTPサーバーに接続してみます。

注意:必ずあなたが利用する資格を持ったSMTPサーバーを使用して下さい。その際メールアドレスは間違えずに入力すること。これを誤ると法的な問題等のトラブルの原因となり得ますので、十分注意して下さい。

正しく接続できたら次のように表示されます。

220 operamail.com InterChange ESMTP v3.62 Ready

このようなメッセージが表示されない場合は接続に失敗している可能性があります。ホスト名、ポート番号を確認して再度接続し直して下さい。

コマンド

SMTPのコマンドです。主なものをここに挙げておきます。斜体の部分は引数、[]の中の引数は省略可能です。

コマンドとその構文意味
EHLO domainSMTPサーバーに接続しているクライアントを、クライアントのホスト名(ない場合はIPアドレスなど)によってサーバーに認識させます。ここで入力したホスト名はReceivedフィールドに書き込まれます。
MAIL FROM:<sender>送信元のメールアドレスを指定します。
RCPT TO:<recipient>送信先のメールアドレスを指定します。
DATAメールの内容を入力します。"."(ピリオド)だけの行が来ると、入力を終了します。
RSETMAILコマンドで開始されたメール転送処理を中止し、それまでに設定した情報をクリアします。
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等の仕組みを採用するサーバーも増えています。 とは言え、そうでないサーバーもまだまだたくさんあります。

あなたも手動でメールを送るときには注意しないと、不正利用者と間違えられるかもしれません。 「接続」の項に書いた注意をよく読んで、タイプミスには気を付けましょう。


Copyright (C) 2001-2005 Muller Norland.
Last Modified: 2006-08-27 18:47:20 (JST)