このページの本文へ

電子メールプロトコル再入門 第6回

トラブルシューティングに役立つステータスコードとは?

SMTPの拡張機能を確かめる「EHLOコマンド」を知ろう!

2011年03月10日 06時00分更新

文● 遠藤哲

  • この記事をはてなブックマークに追加
  • 本文印刷

 SMTPの基本仕様は、前回紹介したとおりだ。特に、EHLOコマンドとHELOコマンドの違いについては、SMTPの拡張機能を使う場合がEHLOとだけ説明した。そこでSMTPの拡張について概要とコマンドシーケンスを紹介しておこう。


SMTPのサービス拡張

 SMTP拡張機能を使うためには、クライアントとサーバの双方がサポートしていなければならない。クライアントがサーバに、SMTP拡張機能をサポートしていることを伝える手段として用意されているのが、EHLOコマンドである。

 サーバはEHLOコマンドを受け付けると、応答として自身がサポートしている拡張機能の一覧を返す。これによって、クライアントとサーバはお互いの機能の折衝ができるようになっている。図1はEHLOコマンドに対するサーバの応答の様子を示したものである。以下、図に示されているSMTPの拡張機能について概要を説明していこう。

図1●EHLOコマンドとその応答

 SIZEは、受信可能な最大メッセージサイズを通知するコマンドで、RFC1870で定義されている。MIMEによりメールで大きなデータを使えるようになったことで、サーバの記憶領域が不足することが多くなったために用意された。メッセージが最大サイズを超える場合、サーバは「永続的失敗」を意味する応答コードを返送できる。

 PIPELINE(RFC2197)はコマンドに対する応答を対話的に返すのではなく、一度に複数コマンドを送って、応答もまとめて返すというように効率的な通信を行なうものだ。

 Enhanced Status Codes(RFC2034)は、通常より詳細なエラー情報を提供するために定義されたものである。この機能をサポートしていると、以降のコマンドの応答にステータスコードが付加され、より詳細なエラーを応答するようになる。

 DSN(RFC3461:Delivery Status Notifications)は配送状態を通知するコマンドである。この拡張機能をサポートするとMAIL及びRCPTコマンドでDSNサービスに関連したパラメータを指定できる。DSNサービスを利用すると送信者は、宛先ドメインのメールサーバ(受信者側MTA)がメッセージを受信者のメールボックスに配信したときに、その受信確認通知を受け取ることが可能だ。

 図2ではRCPTコマンドにNOTIFYパラメータを使って受信確認の送信をSUCCESS(メッセージ配送完了時に送信)に指定している。

図2●SMTPのサービス拡張

 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「電子メールプロトコル再入門」を再編集したものです。内容は原則として掲載当時のものであり、現在とは異なる場合もあります。

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード