SMTPはSimple Mail Transfer Protocolの頭文字をとったもので、文字通りメー ルを送信する際に現在一般的に使われているプロトコルです。TCP/IPの25番ポー トで動作します。このページでは「telnetでぽっぷ」に引き続き、telnetでメー ルサーバに接続してメールを送信してみたいと思います。
まずはSMTPサーバに接続します。接続されたら、HELOコマンドで通信開始を伝えます。
telnet mail-gw.yourisp.ne.jp 25 helo
次に、MAIL FROMコマンドとRCPT TOコマンドを使って、差出人(あなた)と受取人 を指定します。わざとらしく「(あなた)」と書きましたが、あなたがそのサーバ に持っているアカウントしかMAIL FROMに設定できないのが普通です。ヘッダの FROM欄でもそうです(これはRFCでも推奨されています)。設定は通ったように見 えるが実際にはメールが送信されない、といった方が正確ですが。
mail from:yourname@mail-gw.yourisp.ne.jp
あれ、パスワードは? パスワードはSMTPでは必要ありません。このあたり、無 防備といえば無防備ですね。「なりすまし」も出来る?
現在では第三者によるメールRelay(他人のサーバを利用して迷惑メー ルを発送すること)を防止するためにいろいろな手段が考案されています。POP認 証(ユーザに一度同じアカウントをPOPで受信させ、その際のIPを記録しておいて、 SMTPでの送信の際に照合する)もその一つです。サーバによってどんな仕組みで Relayを防いでいるかは異なりますが、いずれにしても「なりすまし」はそうそ う簡単には出来ません。
さて悪さをあきらめてもらったところで、次は受取人の設定です。
rcpt to:friend@friendisp.ne.jp
次はいよいよメールのヘッダと本文をサーバに送ります。DATAコマンドを送信し た後、まずヘッダを送り、空白行を一行送った後、本文を送ります。ヘッダと本 文は空白1行で分けるのがお約束です。このあたりのお約束はいつもメーラーで 送信しているだけでは決して分かりませんね。ところで、本文はエンコードしな いと日本語が送れないので、英語ででも用意してください。自前でエンコード出 来る人はエンコードしたデータを本文の部分に流し込みます。
data Subject: test To: friend@friendisp.ne.jp From: yourname@mail-gw.yourisp.ne.jp This is a test mail. .
DATAコマンドの終了は、半角ピリオド一文字だけの行を送るのが合図です。ここ までのやりとりが正常に行われていれば、ここで次のメッセージが表示されてメー ルの送信が完了したことになります。
250 Message accepted for delivery.
実は何もヘッダをつけなくてもメールを送信することは出来ます。Toヘッダを明 示しなければTo欄が空のメールが相手に届きます。「To欄が空」だったら相手は だれ?もちろん最初にRCPT TOで設定した受取人です。一口にメールといっても、 実体はエンベロープ、ヘッダ、本文の3つの部分で構成されています。ヘッダに 宛先がかかれていなくても、エンベロープに書かれた受取人の元へとメールは配 送されます。エンベロープは通常私たちの目に触れることはありません。BCCは このエンベロープを利用して実現されていますし、メールが転送されるときはヘッ ダに手を加えることなく、エンベロープが書き換えられているのです。なかなか 優れたアイデアですね。ちなみにまともなSMTPサーバの場合、Fromヘッダは差出 人が明示しなくても、MAIL FROMに設定されたものが自動的に加えられます。 「なりすまし」も「差出人無記名」もなし、です。
例によってまったく実用性はない情報でしたが、このページに載せた内容がみな さんメールの仕組みを理解するのに少しでもお役に立てたら幸いです。
内容に関するご指摘・ご質問は下記Webmasterまでお願いします。