E-mailを実際に送受信するためのProtocolである、SMTP、POPについて書いていきます。ここで、もうひとつのE-mailのProtocolのIMAPについては、割愛させてもらいます。というのも、今現在、私が知らないことが要因です。
E-mailのmessageは、headerとbodyで構成されています。body部は、MUAでuserが作ったmessageの本文にあたります。MUAでuserが作った、本文以外の部分は、headerの一部になります。
headerの例を下表に示します。この中で、上から3つ、Date,From,Toが必須です。
| header | 例 | 説明 |
|---|---|---|
| Date | Sun,01 Oct 2000 12:34:56 +0900 | 送信日付 |
| From | "the GAME"<hhh@wwf.com> | 送信者 |
| To | Vince<owner@wwf.com> | 受信者 |
| Message-ID | 01102000001@wwf.com | messageの番号。世界中でuniqueでなければならない |
| Reply-To | rock@eyebrow.org | 送信者が返信をしてもらうときにFromで指定したaddress以外のaddress |
| MIME-Version | 1.0 | MIMEのVersion |
| Subject | for World Champion's fans | 表題 |
| Cc | jimmy@44magnum.co.jp | carbon copyの宛先 |
| Bcc | rei_atsumi@vowwow.co.jp | Blind Carbon Copyの宛先 |
| Content-Type | text/plain; charset=iso-2022-jp | 本文の形式 |
上記を踏まえて、E-Mailの見本を下に示します。この中で、DateとMessage-Idは、自動生成されました。実際には、Receivedというheaderも加わるのですが、serverが勝手に付加するものなので、気にする必要はないでしょう。もっとたくさんの見本が欲しい方は、ご自身のMUAに(ほとんどの場合)、header情報を見る機能がありますので参照ください。
From: "the GAME"<hhh@wwf.com> Date: Sun, 13 Jun 1999 22:22:11 +0900 (JST) Message-Id: <199906131322.WAA02027@wwf.com> Subject: test To: Vince<owner@wwf.com> X-Mailer: PostMan v 1.0 Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset="iso-2022-jp" X-UIDL: abae988542544dd28735ce39afe3fed5 これは、てすとです
それでは、送信側のProtocolであるSMTPから見て行きましょう。
SMTP Serverにmailを送るには、そのserverのDomain Nameまたは、IP AddressがわかればOKです。まれにPort番号が、Wellknown Portと違う場合もありますので、違う場合は注意する必要があります。詳しくは、所属のProviderに問い合わせてください。下表は、主なSMTP commandです。serverと実際のやり取りに使われます。
| Command | 用途 |
| HELO | serverにこれから通信を始めることを伝える。messageの送信Domainを伝える意味でも使える。 |
| Mail送信の初期化。送信者を伝える。 | |
| RCPT | 送信先の指定。 |
| DATA | Mail送信の開始。 |
| RSET | Mail送信のResetをして、やり直す。 |
| HELP | help情報の取得。 |
| QUIT | SMTPとの接続を終了する。 |
上記のcommandをserverが受信すると、返答を返します。この返答は、番号が付与されています。この番号の例を下表に示します。
| 番号 | 意味 |
| 211 | System Status/System Help |
| 214 | Help Message |
| 220 | service準備完了 |
| 221 | SMTP connection終了 |
| 250 | 要求commandの完了 |
| 354 | mail受付開始 |
| 421 | service受付不可。SMTP session終了 |
| 451 | local側のerror |
| 452 | 記憶容量不足 |
| 500 | commandの構文error |
| 501 | 引数などのerror |
| 502 | 要求されたcommandを知らない |
| 503 | 要求commandの順序が違う |
| 504 | 要求commandの引数などが実装されていない |
| 551 | 指定のserverに指定のuserが存在しない |
SMTP serverの実際の動作は、
これで送信完了となります。ここで、各入力の最後には、改行codeが必要となりますが、Internetの改行codeは、CR+LFです。また、各入力でのserverからの応答がerrorの場合、やり直さなければなりません。
以下に例示します。
| Client側 | Server側 |
| smtp.wwf.com:25 | 220 ESMTP server (InterMail vM.5.01.03.08 201-253-122-118-108-20010628) ready Sun, 7 Oct 2001 15:59:12 +0900 |
| HELO hhh@wwf.com | 250 sendmail1.wwf.com |
| MAIL From:hhh@wwf.com | 250 Sender <hhh@wwf.com> Ok |
| RCPT To:owner@wwf.com | 250 Recipient <owner@wwf.com> Ok |
| RCPT To:smh@wwf.com | 250 Recipient <smh@wwf.com> Ok |
| RCPT To:rock@wwf.com | 250 Recipient <rock@wwf.com> Ok |
| DATA | 354 Ok Send data ending with . |
| これは、てすとです "CR+LF"."CR+LF" | 250 Message received: 20011007070356.SBHL1468.sendmail1.wwf.com@wwf.com |
| QUIT | 221 sendmail1.wwf.com ESMTP server closing connection. |
POPの通信手順は、SMTPの通信手順にいくつかの手順が追加されているようなものです。SMTPと同じように、POPについて見ていきましょう。
POP serverと通信を行うには、serverのDomain Nameまたは、IP AddressとPort番号、User名、そのPasswordが必要です。詳しくは、所属のProviderに問い合わせてください。下表は、主なPOP commandです。serverとの実際のやり取りに使われます。
| Command | 用途 |
| USER | User名を知らせる |
| PASS | Passwordを送る |
| APOP | USER、PASSを暗号化して送る |
| LIST | mail boxにあるmailの一覧を取り出す |
| RETR | mailを取り出す |
| DELE | mailを削除する。ただし、実際に削除されるのは、接続を終了したときであり、それまでは、ゴミ箱に入ってるような状態 |
| RSET | 接続をresetする |
| QUIT | 接続を終了する |
上記のcommandをserverが受信すると、返答を返します。この返答は、OKなら"+OK"、NGなら"-ERR"、という単純なものです。
POP serverとの実際のやり取りですが、以降は全てのcommandが正常であった場合の動作です。
これで、session終了です。なお、複数のmessageを取り出すには、RETR commandとDELE commandを複数回繰り返せば、取り出すことができます。
以下に例示します。
| Client側 | Server側 |
| pop3.wwf.com:110 | +OK InterMail POP3 server ready. |
| USER hhh | +OK please send PASS command |
| PASS thegame | +OK 0112080501 is welcome here |
| LIST | +OK 1 messages 1 522 . |
| RETR 1 | +OK 522 octets Return-Path: <hhh@wwf.com> Received: from wwf.com Message-Id: <20011007070356.SBHL1468.sendmail.wwf.com@hhh.wwf.com> Date: Sun, 7 Oct 2001 16:04:19 +0900 From: <0112080501@jcom.home.ne.jp> これは、てすとです . |
| QUIT | +OK hhh Sendmail POP3 server signing off. |
SMTPとPOPの例の中で"serverから、・・・・で始まるmessageが返ってきます。"と書いているのは、serverによって内容が異なるからです。しかし、基本的な動作は、RFCに標準化されていますので、変わりません。どちらも、telnet接続で、ためすことができますので、試してみては如何でしょうか。telnetのapplicationは、online softwareとして、あちこちに転がってるし、OSに大体標準で含まれているようです。また、serverを自分のmachineで動かすsoftwareもあります。
また、自分でMUAを作成する場合は、Serverの応答の1文字目に注目すれば簡単に実装できるでしょう。