SMTP/POP -メールのしくみ-

SMTP/POP -メールのしくみ-

SMTPとPOPは電子メールで使われるプロトコルです。
電子メールは、送信と受信で異なるプロトコルを使って
データをやり取りを行うのが特徴。

送信で使われるプロトコルが「SMTP(Simple Mail Transfer Protocol)」、
受信で使われるプロトコルが「POP(Post Office Protocol )」です。

SMTPとPOPはそれぞれ、以下のRFCで標準化されています。

  • SMTP
    RFC2821
  • POP
    現在主流のPOP Version3(POP3)がRFC1939で標準化

今回はメール配信の基本動作から見ていきましょう。

メール配信の基本動作

メール配信には、SMTPとPOP3、そしてDNSのしくみを利用しています。

メール配信の基本動作について

メールを書いてメール・ソフトの送信ボタンを押すと、
メール・ソフトがSMTPを使用して内容を
「メール・サーバ」へと送ります。

メール・サーバでは、メールの宛先を見て、そのメールアドレスを
管理するメール・サーバのIPアドレスを、DNSを利用して検索し、
該当するIPアドレスへメールを転送します。

宛先のメールサーバに届くと、宛先ごとのメール・ボックスに
保存されます。

メールの受信者は、メール・ソフトがPOP3を利用して
メールをチェックし、新着メールがあれば受信します。

メールを転送する時には、宛先のメールアドレスを管理する
メールサーバへメールを転送します。

そのときに宛先メール・サーバのIPアドレスを調べるためにDNSを使用します。
メールアドレスの「@以下」のドメイン名から、そのドメインを管理するサーバの
IPアドレスを調べます。

以上がメール配信の基本動作です。

続いて、SMTPを使ったメール配信の仕組みを見ていきましょう。

SMTPのメール配送の仕組み

SMTPはメール・ソフトからメール・サーバへメールを送信する時と、
メール・サーバ間でメールを転送する時に使用されます。

メール・ソフトとメール・サーバ間のSMTPのやり取りは以下の通り。

メール・ソフトとメール・サーバ間のSMTPのやり取り

SMTPのやり取り自体は多いですが、やっていることは
とってもシンプル。

まず、メール・ソフトからメール・サーバへTCPの25番ポート宛に
「HELOコマンド」を送ります。

メールサーバから「OK」が返信されてきたら、
メールの送信元アドレス、宛先アドレス、本文の順番で送信します。

メール・サーバからの返信メッセージには3桁の数字が含まれていて、
この数字(コード)によってOKやエラーの種類を判断します。

例えばコード「250」が返ってくればOKを意味して、
「530」が返ってくればアクセス拒否を意味します。

それぞれのコード番号と意味については以下の通りです。

200:正しくない応答コード(正しくは250)で、
SMTPが標準化された初期に使われていた
211:システムの状態、またはシステムヘルプの応答
214:ヘルプメッセージ
220:SMTPコネクションが確立したときに使われる
221:転送チャンネルを閉じる(QUITに対する応答)
250:要求されたコマンドが正常に終了したことを表す
251:宛先として指定されたユーザはローカルに存在しないため、
指定した宛先へ転送する
252:ユーザ確認ができず、メールの転送は可能
253:サーバがそのノード宛メッセージをもっている際の成功コード
(メッセージがない場合は251を使用する)
334:ダイジェスト待ち
354:DATAに対する応答。「.」が来るまでのすべてのデータを
メール本文として扱う
421:サービスが利用不可能のため転送を閉じる
432:認証メカニズムを変更する必要があることを示す
450:他に該当しない一時的なエラー
451:データ処理中のエラー
452:システムのディスク容量不足
453:メールが存在しない
454:サーバ側の原因により認証が失敗した
458:何らかの理由でキューができない
459:何らかの理由でそのクライアントにサービスが提供されない
500:一般的な構文エラー、コマンドが解釈不能
501:パラメータや引数の構文エラー
502:コマンドが実装されていない
503:コマンドの順序が正しくない
504:コマンドのパラメータが実装されていない
521:メールを受けとらない
530:何らかの理由でアクセスが拒否された
534:認証メカニズムが弱いことを示す
535:認証エラー
538:要求された認証メカニズムには暗号化が必要
550:要求されたアクションを実行できない
551:ユーザはローカルでない
552:要求されたコマンドが中止された
553:要求されたコマンドが受け入れられない
554:トランザクションの失敗
555:MAIL/RCPTコマンドに対するパラメータエラー

最後に「QUITコマンド」で送信終了をメール・サーバに知らせます。
メール・サーバからOKコマンドが帰ってきたらTCPを切断して終了です。

複数のメールを送信する場合は、この動作を繰り返していきます。

SMTPで使用するコマンドには以下のようなものがあります。

HELO:SMTPクライアントをSMTPサーバに認識させる
MAIL:メール転送を開始。メールの送信元アドレスを指定
RCPT:メールの受信元アドレスを指定
DATA:メッセージデータを送る
VRFY:ユーザ名の確認を行し、指定したユーザが存在すればユーザ情報を返す
EXPN:メーリングリストの会員アドレスの要求
QUIT:セッションを終了させる
HELP:SMTPコマンドのhelpを要求する
NOOP:操作なし(ダミーコマンド)
RSET:セッションの状態をリセット(メール転送処理の中止)
SEND:メール転送を開始。メールの送信元アドレスを指定
SOML:メッセージをターミナルに出力
SAML:メッセージをメールボックスとターミナルへ出力
TURN:クライアントとサーバの役割の交換

複数の宛先にメールを送信する場合は、RCPTコマンドで
メールの宛先を送信するときに、複数の宛先をまとめて送信します
(5つの宛先を指定した場合は、RCPTコマンドを5回繰り返す)。

関連記事

メールマガジン

ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!

「初心者にも理解できるネットワーク技術」

これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。

もちろん無料です!!

↓メールマガジン購読はこちら↓

メールアドレス: