Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
I completely understood email
Search
waneal
February 28, 2021
Technology
0
330
I completely understood email
waneal
February 28, 2021
Tweet
Share
More Decks by waneal
See All by waneal
Migrating Rails Applications from EC2 to ECS
waneal
0
120
Other Decks in Technology
See All in Technology
AWSで始める実践Dagster入門
kitagawaz
1
610
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
9.9k
サンドボックス技術でAI利活用を促進する
koh_naga
0
200
人工衛星のファームウェアをRustで書く理由
koba789
15
7.8k
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
230
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
180
Django's GeneratedField by example - DjangoCon US 2025
pauloxnet
0
150
2025年夏 コーディングエージェントを統べる者
nwiizo
0
140
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
S3アクセス制御の設計ポイント
tommy0124
3
200
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
130
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
4 Signs Your Business is Dying
shpigford
184
22k
Code Reviewing Like a Champion
maltzj
525
40k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Done Done
chrislema
185
16k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Agile that works and the tools we love
rasmusluckow
330
21k
Transcript
メール完全に理解した 2021/02/20
自己紹介 - waneal - @noobs_waneal - インフラエンジニアやっております - AWS/GCPで動くシステムのお世話 -
Go、Python、コンテナ技術に興味あります - 趣味 - TVゲーム - ApexとかValheimとかとか - バスケットボール - サンアントニオスパーズが好きです - 山登り・キャンプ - 最近できてないですが。。
アジェンダ - メールが届くしくみ - メールプロトコルのしくみ - メールの中身
メールってどういう仕組で届く?
メールが届くまでのイメージ Aさん メールクライアント SMTPサーバ SMTPサーバ Bさん メールクライアント Bさんへ 届けろ OK釈迦地蔵
メールが届くまでのイメージ SMTPサーバ SMTPサーバ SMTP Bさんへ 届けろ 受け取った Aさん メールクライアント Bさん
メールクライアント
メールが届くまでのイメージ SMTPサーバ SMTPサーバ 私宛のメー ルをよこせ POP3/IMAP OK 釈迦地蔵 Aさん メールクライアント
Bさん メールクライアント
メールプロトコルはどういう仕組?
POP3、IMAP - POP Version 3 - POP = Post Office
Protocol - メールサーバに届いているメールを自分のコンピュータに取り込む - 一度取り込まれたメールはメールサーバから削除される(設定にもよるけど) - IMAP - Internet Message Access Protocol - メールサーバのメールをそのまま読み込み、管理する 今回は範囲外
SMTP - Simple Mail Transfer Protocol - メール転送プロトコル - クライアント
- サーバモデル - ステートフル https://datatracker.ietf.org/doc/rfc5321/?include_text=1
SMTPの流れ https://www.afternerd.com/blog/smtp/
SMTPコマンド - EHLO - セッションの開始、クライアントが利用できる拡張機能の要求 - MAIL - MAIL FROM:<reverse-path>
[SP <mail-parameters> ] <CRLF> - reverse-pathはエラー報告の通知に利用するパス - Mailer Daemonの送信先 - RCPT - RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF> - 宛先メールアドレスを指定 - 何度でも繰り返し可能。複数の宛先を指定できる - DATA - DATA <CRLF> - メールデータの送信
メールってどういう中身になってる?
メールオブジェクト - メールオブジェクトはエンベロープとコンテンツで構成される - エンベロープ - 送信元アドレス - 1つ以上の転送先アドレス -
オプション - コンテンツ - ヘッダーセクション - ボディ
The Origination Date Field - orig-date - 作成者がメッセージを作成完了し、メール転送準備が整ったとき。
Originator Fields - from - 送信元 - sender - Fromに複数のメールボックス情報が含まれている場合、
Senderに単一のメールボックス情報が含 まれる - 作成者と送信者が異なる場合、 Senderに送信者が入る - reply-to - 返信時に送信すべき宛先。なければ Fromに対して送信される
Destination Address Field - to - 送信先 - cc -
送信先 - carbon copyの略 - bcc - 送信先 - blind carbon copyの略 - to, ccのメールアドレスに送るときは削除され、 bccのアドレスに送信するときはそのまま残る - bccアドレスの扱い方は実装によって異なる
Identification Fields - message-id - 特定のバージョンの特定のメッセージを特定できる一意な識別子。一意であることは生成するホス トで保証する - 生成方法はいくつかあるが以下を推奨 -
"絶対日時とその他にユニークな何かの組み合わせ @ドメイン名、もしくはIPアドレス" - in-reply-to - 全てのReplyメッセージに必要。親メッセージに message-idが含まれる - 新しいメッセージの場合、 in-reply-toフィールドが存在しない - references - in-reply-toに保存されているmessage-idの蓄積 - スレッド機能はこれを参考にしていると思われる
Trace Fields - trace - 1つ以上のreturn(Return-Path) - SMTPで送信元アドレスとして指定されたもの - SMTPの世界が終わると、エンベロープのデータは消えるため
Informational Fields、Resent Fields、Optional Fields comming soon...
まだわかってないところ - SMTPの拡張プロトコル - MIME - 実際にSMTPプロトコルを使ってメールを送る
参考資料 - 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 -