7.8 Simple Mail Transfer Protocol(SMTP)

SMTPはメイルを配送するためのプロトコルです。その歴史は非常に古く、 そのためにセキュリティや成りすまし、スパムなど 、今日問題になっていることは何も想定されなかった時代のものです。 そのために、様々なメカニズムがサーバプログラムには導入されていますが、 その基本となるプロトコルには今に至るもほぼ同じままなのです。

SMTP では、メイルの配送のみを担います。そして、ここで言う配送とは受取り 人の所属するメイルサーバまでを意味します。つまり、ユーザへの配送はSMTP では考えていません。ユーザへの配送は、他のプロトコルに委せられています。 例えば、後で解説するPOPやIMAPがこうしたメイルへのアクセスを担当します。 あるいは、携帯電話では、サーバまでSMTPでメイルが到着し、その後は携帯電話 会社の独自のアプリケーションがユーザの携帯電話までメイルを送ります。

SMTPでメイルを送るのは非常に簡単です。

> telnet mail.wakhok.ac.jp 25
Trying 10.0.0.10...
Connected to mail.wakhok.ac.jp
Escape character is '^]'.
220 mail.wakhok.ac.jp ESMTP Sendmail; Mon, 7 Jun 2004 20:41:24 +0900 (JST)
helo wakhok.ac.jp
250 mail.wakhok.ac.jp Hello test.wakhok.ac.jp [192.168.0.1], pleased to meet you
mail from:<kanayama@wakhok.ac.jp>
250 <kanayama@wakhok.ac.jp>... Sender ok
rcpt to:<hoge@virtual.domain.jp>
250 <hoge@virtual.domain.jp>... Recipient ok
data
354 Enter mail, end with "." on a line by itself
subject: test

this is a test mail.
.
250 UAA18096 Message accepted for delivery
quit
221 ultra10.wakhok.ac.jp closing connection
Connection closed by foreign host.

上の例では、太字で印刷された部分が手で入力したSMTPのプロトコルで、 kanayama@wakhok.ac.jp から hoge@virtual.domain.jp 宛に、 件名(subject:) test というメイルで、本文が this is a test mail. というメイルを出しています。

メイルは、From行やTo行、あるいはsubject行などの ヘッダと いう呼ばれる部分と、実際のメイルの本文が書かれる本文(body)に別れています (ヘッダと本文は改行のみの空行で分けられます)。

Received: from pc2f001.summer00.wakhok.ac.jp ([192.168.0.1])
    by pc2f002.summer00.wakhok.ac.jp (R8/cf1.0) with ESMTP id f6U9c8k89707
    for <noriyo@summer00.wakhok.ac.jp>; Mon, 30 Jul 2001 18:38:08 +0900 (JST)
                        (envelope-from kanayama@inner-root.wakhok.ac.jp)
Received: from mytest@localhost)
    by pc2f001.summer00.wakhok.ac.jp (R8/cf1.0) with ESMTP id RAA01100
    for <noriyo@summer00.wakhok.ac.jp>; Mon, 30 Jul 2001 18:38:07 +0900 (JST)
Date: Mon, 30 Jul 2001 18:38:05 +0900 (JST)
From: mytest <mytest@summer00.wakhok.ac.jp>
Message-Id: <200008010820.RAA01100@pc2f001.summer00.wakhok.ac.jp>
To: mytest@summer00.wakhok.ac.jp
Subject: test

[ メッセージ本体 ]

しかしながら、実際の配送はこうしたFromやToの情報ではなく、先に手でSMTPを 入力した時に行ったような、mail from や rcpt to などの情報に従って配送 される仕組みになっているので(それらはエンベロープというところに書かれているが、 配送が終わると削除される仕組みになっている)、誤解をされやすい仕組みに なっています。 このように、件名やその他のFrom行と呼ばれる差出人情報や、To行と呼ばれる 宛先情報もSMTPサーバ側ではなく、クライアント側が入力する任意の情報であり 、そしてこれらのヘッダは全て信用する仕組みになっているために、 簡単に事実と異なる情報を入力できるようになってしまっている のです。

従って、本質的にSMTPでは、この嘘つき問題を解決することは出来ません。 また、サイトによってそうした嘘つきを禁止するメカニズムを導入していても、 世界中に一つでもそうした嘘つきを許す設定のサイトがあれば、そこからのメイルを 防ぐ方法はなく、強制的にサーバで受取りを拒否するか、消去するしかないことに なります。

唯一メイルで信用出来るのは、信用出来るサイトを通ってきたメイルの 先頭に順に書かれる以下のような Received行と呼ばれる情報です(Received行は メイルの送受信に関わった全てのSMTPサーバが記述しますので、3行Received行が あれば、3つのSMTPサーバを経由したことになります)。

上の例では、2つのSMTPサーバを経由したメイルの先頭部分で、上のReceived行が 自分の受け取るSMTPサーバで、下のReceived 行が最初に出した方のSMTPサーバで 書き込まれたものです(Received 行は、新しいものが上に書き込まれて行きます)。 また、このReceived行には、差出人情報(envelope-from)や受取り人情報(for以下)が 詳しく書き込まれています(そういうSMTPサーバの設定になっている)。 こうした情報は、通常のFrom行やTo行とは違い、SMTPサーバが書き込んでいるので、 少なくともそのサーバが書いたのが正しければ、正しい配送情報が書かれている 事になります。



Noriyo Kanayama