SMTPの通信方式・コマンドについて

 SMTP (Simple Mail Transfer Protocol) は,電子メールの送信に用いるL7のプロトコルです.

今まではぼやっとした理解でしたが,CTFで直接SMTPコマンドを入力する問題が出題されていたので,今回はそのコマンドや通信方式について簡単に要約します.

一般的なメール送信で用いるSMTPのコマンド

nc xxx.xxx.xxx.xxx 25

メールサーバに対してポート25でアクセス 

 

HELO example.com 

HELOコマンドでクライアントを通知して通信開始

 

MAIL FROM: sender@example.com

MAIL FROMコマンドで送信元メールアドレスの通知

 

RCPT TO: receiver@example.com

RCPT TOコマンドで送信先メールアドレスの通知

 

DATA

354 go ahead 

From: sender@example.com

To: receiver@example.com

Date: 2017/07/31 22:44

Subject: Subject of mail

 

Hello!

Goodbye!

.

DATAコマンドで,実際のメールの内容を入力していきます.

354 go aheadの後に各種メールヘッダを入力した後,空行を入力します.空行がメールヘッダとメール本文の区切りの合図になります.

そして,任意の内容を入力した後,コロン1文字(.)を入力すると,それが終了の合図になります.

 

QUIT

最後にQUITコマンドで通信を正常終了します.

 

まとめ

HELO {domain name} SMTP通信の開始
MAIL FROM {mail address} 送信元メールアドレスの通知
RCPT TO {mail address} 送信先メールアドレスの通知
DATA メール内容入力開始の合図
QUIT SMTP通信の終了

 

今後

SMTP-AUTHで用いられるAUTHコマンドや,HELOコマンドの拡張版であるEHLOコマンドは拡張SMTPで定義されているらしいので,今後調査してみます.