以前、コマンドだけでメールを送信する記事を書きましたが、
メール送信の一連の流れをパケットで追いかけていきたいと思います!
人物相関図
下記のソースを使えば、上記の図の構成でDocker環境を構築することができ、実際に動作を検証することができます。
https://github.com/kuniiskywalker/mail-tester
登場人物
送信君(送り手のメールサーバー)
IP:10.5.0.6
ドメイン:fuga.local
受信君(受け手のメールサーバー)
役割:メールサーバー
IP:10.5.0.5
ドメイン:hoge.local
案内マン(ネームサーバー)
IP:10.5.0.4
あらすじ(送信完了までの送信サーバーのパケットの流れ)
この図を元に解説していきます。
① 送信先メールアドレスのMXレコード確認
※MXレコード:メールの送信先IPアドレスが設定されたDNSレコード。
root@hoge.local
に送信したいので、hoge.local
のMXレコード教えてください
ではmail.hoge.local
のIPアドレスを教えてください。
10.5.0.5
です。
② TCPハンドシェイク
はじめまして受信君!
案内マンからIPアドレスきいてご連絡しました!
今からメールを送るためのやり取りしたいのですがいいですか?
はい大丈夫です!
ありがとうございます!
③ EHLO
※EHLOとはSMTP拡張機能を使うために送信者と受信者でお互いにサポートしてる機能をあわせて使用しましょうというやり取り。
メール受信を行う上での開始準備できてます!
それではまず、受信君はどういった機能をサポートしてるか知りたいので、教えてもらっていいですか?
↓こういうやつに対応してます!
SIZE:受信可能サイズ 10240KB
PIPELINE:SMTPで送信を行うための準備に使うコマンドを一括実行できる
他は割愛。。。
ありがとうございます!
PIPELINE対応してるんですねー、ではまとめて送信メールアドレスとか、送り元メールアドレスを送りますので、送信可能かどうか確認お願いします!
※MAIL FROM, RCTP TO, DATAコマンドを使って上記の確認を行う。
※1個ずつ実行していく場合は通信の利用効率が悪くなるため、こういった方式が導入されている。
⑤ 送信可否結果
⑥ メール送信
それではroot@hoge.local宛て
に、差出人root@fuga.local
として、件名:test
、本文:This is test mail.
でお送りします!
まとめ
登場人物も含めてやり取りをまとめてみました!
ちょっと駆け足で書いたので、ちょっとずつ修正します。。。
ローカル環境でメールの送受信の確認ができる環境をDockerでつくったのでご活用ください!
https://github.com/kuniiskywalker/mail-tester