SMTPの基本仕様は、前回紹介したとおりだ。特に、EHLOコマンドとHELOコマンドの違いについては、SMTPの拡張機能を使う場合がEHLOとだけ説明した。そこでSMTPの拡張について概要とコマンドシーケンスを紹介しておこう。
SMTPのサービス拡張
SMTP拡張機能を使うためには、クライアントとサーバの双方がサポートしていなければならない。クライアントがサーバに、SMTP拡張機能をサポートしていることを伝える手段として用意されているのが、EHLOコマンドである。
サーバはEHLOコマンドを受け付けると、応答として自身がサポートしている拡張機能の一覧を返す。これによって、クライアントとサーバはお互いの機能の折衝ができるようになっている。図1はEHLOコマンドに対するサーバの応答の様子を示したものである。以下、図に示されているSMTPの拡張機能について概要を説明していこう。
SIZEは、受信可能な最大メッセージサイズを通知するコマンドで、RFC1870で定義されている。MIMEによりメールで大きなデータを使えるようになったことで、サーバの記憶領域が不足することが多くなったために用意された。メッセージが最大サイズを超える場合、サーバは「永続的失敗」を意味する応答コードを返送できる。
PIPELINE(RFC2197)はコマンドに対する応答を対話的に返すのではなく、一度に複数コマンドを送って、応答もまとめて返すというように効率的な通信を行なうものだ。
Enhanced Status Codes(RFC2034)は、通常より詳細なエラー情報を提供するために定義されたものである。この機能をサポートしていると、以降のコマンドの応答にステータスコードが付加され、より詳細なエラーを応答するようになる。
DSN(RFC3461:Delivery Status Notifications)は配送状態を通知するコマンドである。この拡張機能をサポートするとMAIL及びRCPTコマンドでDSNサービスに関連したパラメータを指定できる。DSNサービスを利用すると送信者は、宛先ドメインのメールサーバ(受信者側MTA)がメッセージを受信者のメールボックスに配信したときに、その受信確認通知を受け取ることが可能だ。
図2ではRCPTコマンドにNOTIFYパラメータを使って受信確認の送信をSUCCESS(メッセージ配送完了時に送信)に指定している。
AUTH(RFC2554)は、SMTP接続の認証を行なう拡張である。EHLOコマンドの応答にキーワード「AUTH」があれば認証をサポートしている。認証のメカニズムは続いてリストされており、クライアントはその中からメカニズムを選び、SMTPサーバで認証を行なう。
8ビットMIME(RFC1652)は、8ビットMIME転送である。この拡張機能をサポートすることによって、メッセージ本体で8ビットデータを伝送できるようになる。
トラブルシューティングの予備知識
SMTPのトラブルシューティングは、基本的な動作とリプライコードを見れば、どの通信手順のときにエラーが発生したかがわかる。しかしリプライコードの表わすエラーの範囲が大きく、具体的な事象を調べるには情報が不足している。
そこでSMTPのトラブルシューティングのために覚えておきたいのが、ステータスコードの存在である。
ステータスコードはリプライコードの後に「2.0.0」のように記述されているドットで区切った3つの数字情報で、リプライコードだけでは表わしきれないより詳細な事象を表現するものである。このコードは「RFC3463 Enhanced MailSystem Status Codes」に定義されている情報で、SMTPのサービス拡張機能の1つである。
サーバがリプライコードのほかにこのステータスコードをサポートしているかどうかは、EHLOコマンドの応答に「250 ENHANCEDSTATUSCODES」が返されるかどうかでわかる。サーバがサポートしていれば、続くMAILコマンドの応答に「250 2.1.0 ok」というようにリプライコードの後ろに空白を1つ以上入れてステータスコードが表示される。
RFCに記載されているステータスコードの形式は左から、「class」「subject」「detail」の順番にドットで区切られている。「class」に設定されるのは「2:成功(Success)」「4:持続的な失敗(PersistentTransient Failure)」「5:永続的な失敗(Permanent Failure)」のいずれかの数字である。「4」と「5」の違いは、4は再び送信すれば成功するかもしれないが、5は再送しても成功する可能性がないということだ。
いずれにしてもclassが4または5の場合は障害が発生しており、その原因を調べるためには残りの2つの数字を見なければならない。「subject」は表示の対象を示し、「detail」でエラーの詳細を表わす。
subjectとdetailを組み合わせた番号は、RFC3463に定義されている。これを参照することで原因をより詳細に把握できる。メールログの解析やメールシステムのトラブルシューティングに役立つことなので、ぜひ心に留めておいてほしい。
本記事は、ネットワークマガジン2007年12月号の特集1「電子メールプロトコル再入門」を再編集したものです。内容は原則として掲載当時のものであり、現在とは異なる場合もあります。 |
この連載の記事
-
第9回
ネットワーク
いろいろな場所で同じメールを読めるIMAPの仕組みとは? -
第8回
ネットワーク
メールクライアントの動作からPOPのやりとりを見てみよう -
第7回
ネットワーク
メールの受信用に作られたPOPを学ぶ -
第5回
ネットワーク
メールを送る際に使われるSMTPの仕組みとは? -
第4回
ネットワーク
メールの添付ファイルを実現するMIMEのマルチパートとは? -
第3回
ネットワーク
メール誕生からある「7ビットの制約」を越えるMIMEとは? -
第2回
ネットワーク
メールの宛名はどこにある?ヘッダを理解する -
第1回
ネットワーク
電子メールを基礎の基礎から学んでいこう -
ネットワーク
電子メールプロトコル再入門<目次> - この連載の一覧へ