Slide 1

Slide 1 text

メール完全に理解した 2021/02/20

Slide 2

Slide 2 text

自己紹介 - waneal - @noobs_waneal - インフラエンジニアやっております - AWS/GCPで動くシステムのお世話 - Go、Python、コンテナ技術に興味あります - 趣味 - TVゲーム - ApexとかValheimとかとか - バスケットボール - サンアントニオスパーズが好きです - 山登り・キャンプ - 最近できてないですが。。

Slide 3

Slide 3 text

アジェンダ - メールが届くしくみ - メールプロトコルのしくみ - メールの中身

Slide 4

Slide 4 text

メールってどういう仕組で届く?

Slide 5

Slide 5 text

メールが届くまでのイメージ Aさん メールクライアント SMTPサーバ SMTPサーバ Bさん メールクライアント Bさんへ 届けろ OK釈迦地蔵

Slide 6

Slide 6 text

メールが届くまでのイメージ SMTPサーバ SMTPサーバ SMTP Bさんへ 届けろ 受け取った Aさん メールクライアント Bさん メールクライアント

Slide 7

Slide 7 text

メールが届くまでのイメージ SMTPサーバ SMTPサーバ 私宛のメー ルをよこせ POP3/IMAP OK 釈迦地蔵 Aさん メールクライアント Bさん メールクライアント

Slide 8

Slide 8 text

メールプロトコルはどういう仕組?

Slide 9

Slide 9 text

POP3、IMAP - POP Version 3 - POP = Post Office Protocol - メールサーバに届いているメールを自分のコンピュータに取り込む - 一度取り込まれたメールはメールサーバから削除される(設定にもよるけど) - IMAP - Internet Message Access Protocol - メールサーバのメールをそのまま読み込み、管理する 今回は範囲外

Slide 10

Slide 10 text

SMTP - Simple Mail Transfer Protocol - メール転送プロトコル - クライアント - サーバモデル - ステートフル https://datatracker.ietf.org/doc/rfc5321/?include_text=1

Slide 11

Slide 11 text

SMTPの流れ https://www.afternerd.com/blog/smtp/

Slide 12

Slide 12 text

SMTPコマンド - EHLO - セッションの開始、クライアントが利用できる拡張機能の要求 - MAIL - MAIL FROM: [SP ] - reverse-pathはエラー報告の通知に利用するパス - Mailer Daemonの送信先 - RCPT - RCPT TO: [ SP ] - 宛先メールアドレスを指定 - 何度でも繰り返し可能。複数の宛先を指定できる - DATA - DATA - メールデータの送信

Slide 13

Slide 13 text

メールってどういう中身になってる?

Slide 14

Slide 14 text

メールオブジェクト - メールオブジェクトはエンベロープとコンテンツで構成される - エンベロープ - 送信元アドレス - 1つ以上の転送先アドレス - オプション - コンテンツ - ヘッダーセクション - ボディ

Slide 15

Slide 15 text

The Origination Date Field - orig-date - 作成者がメッセージを作成完了し、メール転送準備が整ったとき。

Slide 16

Slide 16 text

Originator Fields - from - 送信元 - sender - Fromに複数のメールボックス情報が含まれている場合、 Senderに単一のメールボックス情報が含 まれる - 作成者と送信者が異なる場合、 Senderに送信者が入る - reply-to - 返信時に送信すべき宛先。なければ Fromに対して送信される

Slide 17

Slide 17 text

Destination Address Field - to - 送信先 - cc - 送信先 - carbon copyの略 - bcc - 送信先 - blind carbon copyの略 - to, ccのメールアドレスに送るときは削除され、 bccのアドレスに送信するときはそのまま残る - bccアドレスの扱い方は実装によって異なる

Slide 18

Slide 18 text

Identification Fields - message-id - 特定のバージョンの特定のメッセージを特定できる一意な識別子。一意であることは生成するホス トで保証する - 生成方法はいくつかあるが以下を推奨 - "絶対日時とその他にユニークな何かの組み合わせ @ドメイン名、もしくはIPアドレス" - in-reply-to - 全てのReplyメッセージに必要。親メッセージに message-idが含まれる - 新しいメッセージの場合、 in-reply-toフィールドが存在しない - references - in-reply-toに保存されているmessage-idの蓄積 - スレッド機能はこれを参考にしていると思われる

Slide 19

Slide 19 text

Trace Fields - trace - 1つ以上のreturn(Return-Path) - SMTPで送信元アドレスとして指定されたもの - SMTPの世界が終わると、エンベロープのデータは消えるため

Slide 20

Slide 20 text

Informational Fields、Resent Fields、Optional Fields comming soon...

Slide 21

Slide 21 text

まだわかってないところ - SMTPの拡張プロトコル - MIME - 実際にSMTPプロトコルを使ってメールを送る

Slide 22

Slide 22 text

参考資料 - https://tex2e.github.io/rfc-translater/html/rfc5322.html - https://tex2e.github.io/rfc-translater/html/rfc5321.html - https://www.geekpage.jp/technology/ip-base/mail-2.php - https://www.youtube.com/watch?v=RdNErie6dKU -