GrapeCity Secure Mail for .NET 4.0J
SMTP プロトコルの概要

SMTP について

SMTP(Simple Mail Transfer Protocol)は、送信者からの E メールメッセージを受信者のメールサーバーまで転送するためのインターネット標準です。「E メールの始まり」で述べたように、この転送は、メールサーバー上のメール転送エージェント(MTA)と、ユーザーのローカルコンピュータ上のユーザーエージェント(UA)を使用することで実現します。MTA の役割は、他の MTA からのメールを送受信することです。UA の役割は、MTA と対話して、エンドユーザーにユーザーフレンドリな環境を提供することです。

SMTP プロトコルは基本的に、メールサーバー間でのメッセージ転送手段を提供します。こうした転送処理を受け取るサーバーは、最終的な宛先か、または単なるメッセージの中継点です。E メールの受信は、POP または IMAP プロトコルによって行われます。これらのプロトコルについての詳細は、「POP3 プロトコルの概要」または「IMAP4 プロトコルの概要」を参照してください。SMTP 転送は、送信者の認証、メールの送信、接続の終了の3段階で行われます。これらの手順は「ロックステップ」型で実行されます。つまり、送信者が1つのコマンドを送信するつど、受信者がこれを処理し、応答を返します。

以下の例では、2つの SMTP メール転送エージェント間で行われる SMTP コマンドを示します。Secure Mail を使用する場合は、認証およびログインの過程はすべて、Smtp コンポーネントによって自動処理されます。

SMTP 認証について

認証の前に、受信者は通常、25 番ポートで TCP 接続をリスン(受信待機)します。接続が確立されると、送信者は HELO コマンドを発行し、これに続けて送信者のドメイン名を提供します。これに対し、受信者は送信者に対して自身の証明を行います。この過程のやり取りは、次のようになります。

受信者 < 25 番ポートの接続を待機 >

送信者: < TCP 接続を確立 >

送信者: HELO sender.com

受信者: 250 server1.dart.com

もう1つの認証方法は、EHLO コマンドを使用する方法です。このコマンドは HELO とほぼ同機能ですが、送信者がサービス拡張の使用を要求する点が唯一異なります。これは SMTP の機能を拡張する手段であり、このトピックで後述します。EHLO コマンドを使用した認証は、次のようになります。

受信者 < 25 番ポートの接続を待機 >

送信者:< TCP 接続を確立 >

送信者: EHLO sender.com

受信者: 250 server1.dart.com
250-HELP
250-EXPN
250-XREMOTEQUEUE
250-ETRN
250-PIPELINING
250-SIZE

この例では、サーバーからの応答は HELO コマンドとほぼ同じですが、サーバーは自身がサポートするサービス拡張を通知しています。この時点で認証段階は終了し、メール送信プロセスを続行できます。パイプライン化すると、上記のプロセス全体を一度の送受信で実行できます。

SMTP によるメール送信

送信者が認証されると、次の段階はメールメッセージの送信です。これは、MAIL FROM、RCPT TO、および DATA の3つのコマンドだけを使用する単純なプロセスです。このプロセスは、MAIL FROM コマンドと、後に続けた送信者アドレスの送信(メールの送信者を指定)によって開始されます。受信者は、メールを受け取る場合は「250 OK」という肯定応答を返します。次に、送信者は一連の RCPT TO コマンドを発行します。個々のコマンドの後ろには、メール受信者のアドレスを指定します。受信者は、個々のメール受信者の許可または拒否を選択します。受信者が拒否されても、メール転送は続行します。送信者は、次に DATA コマンドを使用して、実際のメッセージを送信します。サーバーはこれに対して「354 Intermediate」という応答を返し、以降に続くすべての行をメッセージとみなします。このメッセージには、Date、Subject、To、Cc、From などのヘッダフィールドと、これに続いてメッセージ本文が含まれます。すべてのデータの送信が完了すると、送信者は <CRLF>.<CRLF> を発行します。これにより受信者は、全データが転送されたことを確認できます。DATA コマンドは、メール処理が完了できなかった場合(受信者が存在しないなど)、またはサーバーのリソース不足が生じた場合のみに失敗します。メール送信プロセスは、次のようになります。

送信者: MAIL FROM: <Smith@Alpha.ARPA>

受信者: 250 OK

送信者: RCPT TO: <Jones@Beta.ARPA>

受信者: 250 OK

送信者: RCPT TO: <Green@Beta.ARPA>

受信者: 550 No such user here

送信者: RCPT TO: <Brown@Beta.ARPA>

受信者: 250 OK

送信者: DATA

受信者: 354 Start mail input; end with <CRLF> . <CRLF>

送信者: Blah blah blah...

送信者: ...etc. etc. etc.

送信者: <CRLF>.<CRLF>

受信者: 250 OK

この段階が完了すると、メールは送信され、接続が閉じられます。Secure Mail を使用すると、上記のメール転送処理は Smtp.Send メソッドによって実行できます。

SMTP の接続終了

メール送信が完了したので、最後に残された処理は接続の終了だけとなります。これには、送信者が QUIT コマンドを発行します。受信者はこれに対し「221」という応答を返し、接続を閉じたことを確認します。このやり取りは次のようになります。

送信者: QUIT

受信者: 221 closing channel

< TCP 接続が終了 >

いったんこのコマンドを発行すると、メール送信プロセスが完了します。上記の例は、Secure Mail を使用する場合は自動実行されます。

デフォルトでは、コマンドと応答は US-ASCII(7ビット)文字セットのテキストで構成されます。8ビットバイト(オクテット)転送チャネル用の拡張プロトコルをサポートするサーバーであれば、EHLO コマンドが使用されたときに、最初の挨拶応答でこの拡張も返します。Secure Mail は、8ビットのバイナリ転送をサポートしています。サーバーが8ビットデータを含むメッセージを受け取って転送した場合、7ビットのみをサポートするすべての中間ネットワークセグメントは、この保留メッセージを検出すると、メッセージの受け取りを拒否することがあります。この結果、一般的にはこのメッセージは送信者に返送されます。

SMTP は認証と送信コマンドの他、以下のようなコマンドをサポートしています。

RSET SMTP サーバーに送られた全データを初期化します。
HELP コマンド名 指定の SMTP コマンドに関する書式情報、およびその他の情報を提供します。
VRFY 受信者の E メールアドレス システムがこのアドレスを受け入れ可能であることを証明します。
EXPN エイリアス名 エイリアスを拡張し、このエイリアスの送信先となる全受信者リストを返します。

SMTP の対話例

次の例は、SMTP を使用してメール転送を行う2つのメール転送エージェント間でのやり取りを示します。

受信者 < 25 番ポートの接続を待機 >

送信者:< TCP 接続を確立 >

送信者: EHLO

受信者: 250 server1.dart.com
250-HELP
250-EXPN
250-XREMOTEQUEUE
250-ETRN
250-PIPELINING
250-SIZE

送信者: MAIL FROM: <Smith@Alpha.ARPA>

受信者: 250 OK

送信者: RCPT TO: <Jones@Beta.ARPA>

受信者: 250 OK

送信者: RCPT TO: <Green@Beta.ARPA>

受信者: 550 No such user here

送信者: RCPT TO: <Brown@Beta.ARPA>

受信者: 250 OK

送信者: DATA

受信者: 354 Start mail input; end with <CRLF> . <CRLF>

送信者: Blah blah blah...

送信者: ...etc. etc. etc.

送信者: <CRLF>.<CRLF>

受信者: 250 OK

送信者: QUIT

受信者: 221 closing channel

< TCP 接続が終了 >

Secure Mail では、これまでに述べた低レベル実装は隠蔽されますが、Smtp.Connection.Logイベントを使用すると、この例のような通信ログにアクセスできます。

 

 


© 2003, GrapeCity inc. All rights reserved.