【NET技術.014】メールのプロトコル①
佐藤@IT雑貨屋です。
WEBのプロトコルの次に、メールのプロトコルについて説明します。過去にハリウッド女優のメグ・ライアンとトムハンクスが主演で話題となった「ユー・ガット・メール」をご存知の方はどれほどいるのでしょうか。これは1998年公開で、電子メールを通じてお互いが引かれあっていくという、恋愛モノの映画でした。
1995年にWindows95がリリースされ、インターネット利用が世界的に本格化する中、互いのコミュニケーションのツールとして電子メールが当時は話題となっていました。
それまでも電子メールは存在してはいましたが、それはどちらかと言うとパソコン通信の延長であったり、電話端末によるP2P通信の延長でしかありませんでした。しかしこのインターネットを介した電子メールの普及から、人々のコミュニケーションのスタイルが大きく変わったのではないでしょうか。
ここではそのメール通信のテクニカル的な事について、紹介をしていきます。
◆メール通信
メールを送るためのプロトコルとして最初に登場したのはSMTP(Simple Mail Transfer Protocol)でした。しかしSMTPは送信側と受信側、両方のホストに電源が入っている事を前提に転送を行うプロトコルなので、通常のPCなどでは送受信が円滑に行われません。そのため、電源を落とさないメールサーバにメールを保管しておき、必要に応じてPCからアクセスしてメールを受信するPOP(Post Office Protocol)などが登場しました。
また以前では、ネットワークは大学などの機関を結ぶものが殆どだったので、SMTPでは信頼できる相手とのやり取りが前提となっていました。しかしインターネットが拡大、普及する中で、様々な人が利用する事になったので、メールの信頼性やセキュリティの確保する手段が必要になっていきました。
◆メール送信のプロトコル(SMTP)
SMTPはメール配信の中心となるアプリケーションプロトコルです。SMTPでは以下の流れでクライアントとメールサーバ間で通信を行います。
このSMTPもHTTPと同様に、クライアントサーバ型のプロトコルです。サービスを要求してメールデータを送る側がクライアント、メールを受け取る側がサーバとなります。そしてTCPコネクションを確立し、通信を開始します。
SMTPではクライアントがコマンドを送り、サーバ側がレスポンスを返します。またクライアントはサーバに向けてメッセージデータを送信します。
・SMTPのコマンドとレスポンス
SMTPで使用されるコマンドやレスポンスには、主に次の様なものがあります。
<コマンド>
HELO:通信開始
EHLO:通信開始(拡張型HELO)
MAIL FROM:送信者
RCPT TO:受信者の指定
DATA:メール本文の送信
QUIT:終了
<レスポンス>
250:要求された処理の完了
354:メールデータの入力開始
451:問題が発生したため処理を中断
500:文法誤り
レスポンスは200番台が正常な受理(処理の完了)、300番台が正常な処理の中間的な回答(処理中)を示します。400番台は転送失敗などの一時的なエラー、500番台は処理継続が不可能なエラーを表します。
◆メールヘッダ
メールには、メールを制御するための情報としてメールへっだが付加します。メールヘッダには、送信元や宛先、賢明などの他に経由するメールサーバやメール作成日付など、様々な情報が格納されます。以下にメールヘッダの例を示します。
From: cat <neko@hogehoge.com>
Date: Mon, 12 June 2024 08:00:00 +0900
To: bird <bird@hogehoge.com>
subject: work information
Received: from zakkaya.com by hogehoge.com with ESMTP
id XXXXX; Mon, 12 June 2024 09:00:00 -700(PDT)
Received-SPF: pass (hogehoge.com: domain of zakkaya.com as
permitted sender) client-ip=XXX.XXX.XXX.XX;
Received: from hogehoge.com by zakkaya.com with ESMTP id YYYYY;
Tue, 13 June 2024 10:00:00 +0900 (JST)
このメールヘッダを確認する事は、迷惑メールなどの不正なメールの送信元を知る為にも重要です。主なメールヘッダの意味を以下にまとめます。
<主なメールヘッダ>
From:差出人のアドレス。複数のアドレスが設定可能
Sender:実際の差出人のアドレス。複数人は設定不可
To:宛先アドレス、複数のアドレスが設定可能
Cc:カーボンコピー先のアドレス。複数のアドレスが設定可能
Subject:メール件名
Reply-To:メール返信先。指定なしの時にはFromを使用。
Date:メール作成日時
Receiveed:メール転送したメールサーバの情報。メールサーバが追加の場合には、
以下のフォーマットを取る。
Received: from 転送元サーバ by 転送先サーバ[via 接続プロトコル] [with 転送
プロトコル] id ユニークid for 宛先メールアドレス; 転送日時
Received-SPF:SPF(Sender Policy Framework)のドメイン認証結果
SMTPのコマンドで送られる情報をエンベロープといい、"MAIL , FROM"での送信元情報や"RCPT TO"の宛先情報などがそれに該当します。これらの情報とメールヘッダのFromやToは一致しない事もあります。具体的には、メールをBCC(Blind Carbon Copy)を使用して送信した場合には、メールヘッダに情報が記載されません。エンベロープ情報を確認することで、全ての送信メールを確認する事が可能となります。