SMTP
SMTP(Simple Mail Transfer Protocol)とは、インターネットで電子メール(以下、メール)を転送するプロトコルです。メールサーバなどメッセージ転送エージェント (MTA、Mail Transfer Agent) は、SMTP を使用してメールを送信、受信、中継します。
SMTPのポート
SMTPで使われるポート番号は以下になります。
- 25番ポート
 最も古いSMTPポートで、最もよく使われます。
- 465番ポート
 SSL(Secure Sockets Layer)暗号化での通信の場合に使われていましたが、現在はTLS(Transport Layer Security)暗号化に置き代わったため、現在は非推奨となっています。
- 587番ポート
 現在のメール送信用デフォルトポートです。TLS暗号化が使われています。
- 2525番ポート
 正式なSMTPポートではありませんが、587番ポートの代替として多くのISP(Internet Service Provider)で使われています。
メッセージ形式
メールメッセージはヘッダとボディに分かれます。ヘッダは複数のヘッダフィールドで構成され、件名や宛先などの情報が含まれています。ボディはメール本文に当ります。
文字コード
文字コードとは、文字をコンピュータで処理するために、各文字に番号を割り振った体系です。主な文字コードは以下になります。
基本的にメールは、ASCIIコード(英語)で書かれたテキストしか送れません。日本語のメールを送るためには、別の文字コードを使う必要がありますが、全て何らかの形でASCIIコードに変換しています。
| ASCIIコード | 文字が7ビットで表現され、アルファベットと特殊文字など127文字で構成されます。 | 
| JIS X 208 | 7ビットを2つ並べて日本語の文字集合を表す。 | 
| ISO-2022-JP | 7ビット体系の文字コード。文字コード切り替えるために、制御コード(エスケープシーケンス)を採用。 | 
| Shift JIS | Microsoftが定めた文字コード。文字が割当てられた1バイト目のバイト数の範囲により、その文字が1バイトか2バイトかを判断。 | 
| ECU | Extended Unix Code の略。AT&T社が定めた文字コード。 | 
メールで日本語を送る場合は、ISO-2022-JP を使うのが標準とされています。これは、ISO-2022-JP が7ビット体系の文字コードだからです。旧来の7ビット体系しか扱えないメールクライアントがある場合、それ以外の文字コードでは文字化けが起こる可能性があります。
コンテンツの指定
メールに多言語や画像、音声などのコンテンツを扱うための規格が MIME(Multipurpose Internet Mail Extensions)です。MIMEは、ヘッダ部に日本語を含めるための仕組みとしての役割を持ちます。
メールを ISO-2022-JP で書いたとしても、途中のメールサーバがASCIIコードと認識してしまい、正常にメール転送が行えなくなる可能性があります。ボディ部(本文)はメール転送に関係ないので、ISO-2022-JP で書けば問題ありませんが、ヘッダ部はMIMEを利用する必要があります。
MIMEの主な機能は以下になります。
| データの種類の指定 (Content-Type) | 従来のテキストやHTML等のテキストファイ(text)、GIFやPNG等の画像ファイル(image)、MPEG等の動画ファイル(video)などの指定 | 
| エンコード方法の指定 (Content-Transfer-Encoding) | ボディが7ビットの文字のみのテキスト(7bit)や8ビットの文字が含まれているテキスト(8bit)、Quoted Printable形式でエンコードしたデータ(quoted-printable)や Base64形式でエンコードしたデータ(base64)などを指定 | 
| マルチパート (Mutipart) | メールに添付ファイルを付けたり、HTMLメールを送るための手法、ボディ部に複数のパート(パートヘッダ+パートボディ)で構成 | 
ヘッダフィールド
ヘッダフィールドの情報は以下になります。
| Date: | 曜日・日・月・年・時・分・秒・タイムゾーンを表示。 [Date: WW, DD MM YYYY HH:MM:SS +0900] | 
| From: | メールの作成者の名前・メールアドレスを表示。 [From: “NAME” <NNNN@XXXX.co.jp>] | 
| Message-ID: | メールを一意に識別する「msg-id」が指定。 | 
| TO:/CC:/BCC: | メールの宛先を表示。 | 
| Received: | トレースフィールド、経由したメールサーバの処理の記録。 [Received: from XXXX.co.jp ([***.***.***.***])] | 
通信プロトコル
メールクライアント(MUA:Mail User Agent)がメールサーバ(MTA:Mail Transfer Agent)にメ-ルを送信する手順は以下になります。
| メールクライアント | 方向 | メールサーバ | 
| メールサーバへ接続(Connected to -) - | → ← | - オープニングメッセージを応答 | 
| クライアント情報を送信[EHLO] - | → ← | - サポートしている拡張機能を応答 | 
| メッセージの差出人を指定[MAIL FROM] - | → ← | - 確認を応答 | 
| メッセージの宛先を指定[RCPT TO] - | → ← | - 確認を応答 | 
| メッセージの送信開始を要求[DATA] - | → ← | - 確認を応答 | 
| メッセージの送信 - | → ← | - 確認を応答 | 
| 切断を要求[QUIT] - | → ← | - 確認を応答 | 
| 切断(Connection closed by -) | → | - | 
SMTPコマンド
SMTPコマンドは、メールの送信や情報の確認に使われます。主なSMTPコマンドは以下になります。
| コマンド | 内容 | 
| HELO(Hello) EHLO(Extended Hello) | クライアントの接続元の確認 | 
| MAIL(Mail) | メッセージの送信者の指定 | 
| RCPT(Recipitent) | メッセージの受信者の指定 | 
| DATA(Data) | メッセージの送信開始を指定 | 
| RSET(Reset) | 接続状態のリセット | 
| QUIT(Quit) | セッションの切断 | 
SMTP応答コード
SMTP応答コードは3桁で構成され、最初の1桁目は応答が成功/失敗したといったコマンドの結果が分かるようになっています。
| コード | 内容 | 
| 1yz | コマンドの確認待ち | 
| 2yz | コマンドの成功 ・220:サービスの準備完了(Service ready) ・221:転送チャネルを閉じる(Service closing transmission channel) ・250:正常終了(Requested mail action okay, completed) | 
| 3yz | コマンド途中の応答 ・354:メールメッセージの入力(Start mail input; end with <CRLF>) | 
| 4yz | 一時的なエラー ・451:コマンドが中断(Requested action aborted; error in processing) | 
| 5yz | 恒久的なエラー ・500:構文エラー(Syntax error, command unrecognized) | 


 
  
  
  
  
