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
Gotanda.rb#47 Mailgun3分クッキング
Search
Hiroki Tanaka
October 27, 2020
Programming
1
6.9k
Gotanda.rb#47 Mailgun3分クッキング
Gotanda.rb#47でLT発表した『Mailgun3分クッキング』です。
Hiroki Tanaka
October 27, 2020
Tweet
Share
More Decks by Hiroki Tanaka
See All by Hiroki Tanaka
機能QA会のすゝめ
hiroki_tanaka
0
190
定期リリースの導入
hiroki_tanaka
0
140
noteの品質課題に立ち上げ直後のQAチームが挑んだ軌跡
hiroki_tanaka
1
1.4k
note初のBug Bashを やってみた
hiroki_tanaka
1
1.4k
コロナ禍の1年間でAWSの資格を 3つ取得した話
hiroki_tanaka
0
340
Rubocop対応のすゝめ
hiroki_tanaka
0
47
Gotanda.rb#48 ECS on Fargateでのハマりポイント
hiroki_tanaka
1
310
Gotanda.rb#46 権限管理のつらみとPundit
hiroki_tanaka
1
7k
Other Decks in Programming
See All in Programming
Azure AI Foundryのご紹介
qt_luigi
1
250
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
220
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
410
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
AWS Lambda functions with C# 用の Dev Container Template を作ってみた件
mappie_kochi
0
210
AHC041解説
terryu16
0
520
為你自己學 Python
eddie
0
540
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
140
rails newと同時に型を書く
aki19035vc
6
730
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
29
4.7k
traP の部内 ISUCON とそれを支えるポータル / PISCON Portal
ikura_hamu
0
230
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
970
Featured
See All Featured
Building Applications with DynamoDB
mza
93
6.2k
GitHub's CSS Performance
jonrohan
1030
460k
The Language of Interfaces
destraynor
156
24k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
39
1.9k
Why Our Code Smells
bkeepers
PRO
335
57k
Optimising Largest Contentful Paint
csswizardry
33
3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
6
210
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Transcript
Gotanda.rb#47 Mailgun3ΫοΩϯά 2020/10/27 גࣜձࣾτϨλ @hiroki_tanaka
ࣗݾհ ɾాத جɿ@hiroki_tanaka ɾSIerɿϑϡʔνϟʔΞʔΩςΫτ(4ؒ) →WebܥϕϯνϟʔɿגࣜձࣾτϨλ(1ؒ) ɾRubyɿ2ɾJavaɿ2ɾSQLɿ5 →࠷ۙΠϯϑϥΤϯδχΞݟश͍தɻ ɾझຯɿεϓϥτΡʔϯɾમ౬८Γ
αʔϏεհ - τϨλҿ৯ళ͚ͷ༧ாɾސ٬ா͕ϝΠϯ ϓϩμΫτɻ(࠷ۙͩͱGoToEatʹࢀՃ͍ͯ͠·͢ɻ)
αʔϏεհ - ίϩφՒʹҿ৯ళ͕͜Ε·ͰஷΊ͖ͯͨாͷސ٬ʹ DMΛҰׅૹ৴ग़དྷΔʮτϨλϝοηʔδʯͱ͍͏αʔ Ϗε͕ੜ·Εͨɻ
ࠓ͢͜ͱɾ͞ͳ͍͜ͱ ʲ͢͜ͱʳ - RailsͱMailgunΛ༻͍ͨૹ৴ϝʔϧͷड৴֬ೝɾ։෧֬ೝɾ URLͷΫϦοΫ֬ೝͷऔಘʹ͍ͭͯ (MailgunΛ͍ͬͯΔਓʹͱͬͯجຊతͳΛ͢ΔͷͰɺऍᷟʹઆ๏͔Ͱ͢…) ʲ͞ͳ͍͜ͱʳ - ϝʔϧؔ࿈ͷgem →ruby-gmailletter_opener_webͳͲ
- ActionMailerͷ͍ํ
ϝʔϧͰ͋Γ͕ͪͳཁ͕ τϨλϝοηʔδͰ͋Γ·ͨ͠ɻ
γεςϜ͔Βૹ৴ͨ͠ϝʔϧ͕Ͳͷఔड৴ ͞Ε͔ͨΓ͍ͨɻ
ૹ৴ͨ͠ϝʔϧͷɺԿ%͕։෧͞ ΕͯຊจͷURL͕ͲͷఔΫϦοΫ͞Ε͔ͨ Γ͍ͨɻ
Ͳ͏࣮ͬͯݱ͠Α͏ʁ
ϝʔϧૹ৴ʹඞཁͳESPଆͰ Կͱ͔ग़དྷͳ͍͔ͳ…ʁ
ESPͱ - ESPͱEmail Service ProdiverͷུͰిࢠϝʔϧ৴ γεςϜαʔϏεΛఏڙ͢Δࣄۀऀͷ͜ͱɻ - ಛʹϚʔέςΟϯάϝʔϧτϥϯβΫγϣϯϝʔϧ(༧֬ ೝϝʔϧͳͲ)ͱ͍ͬͨࣄۀʹ݁͢Δϝʔϧͷ৴͕ओɻ -
༗໊ॴͩͱSendGridMailChimpɾAmazon SESɻ - ٛʹGmailyahooϝʔϧ֘͢Δɻ
ࠓճ༻͢ΔESPɿMailgun - ࠓճMailgunͱ͍͏ESPΛ༻ɻ - Mailgun Technologies Inc͕ఏڙ͍ͯ͠ΔαʔυύʔςΟͷ ΫϥυϝʔϧαʔϏεɻ - ຖ݄࠷େ1ສ௨·ͰແྉͰϝʔϧΛૹ৴Ͱ͖ΔͷͰɺखܰʹ
ελʔτग़དྷΔɻ (Googleύʔτφʔϖʔδ͔ΒͷਃࠐΈͩͱ3ສ௨·Ͱແྉɻ)
MailgunͷϝϦοτ ʲϝϦοτʳ - ॳظઃఆ͕؆୯ɻ →ΞΧϯτ࡞~Mailgunઃఆ~DNSઃఆ~RailsଆʹͦͷMailgunઃఆΛద༻͢Δ͚ͩ Ͱɺ͙͢ʹϝʔϧૹ৴ՄೳʹͳΔɻ - APIΛެ։͍ͯ͠ΔͷͰɺϓϩάϥϜ͔ΒͷΧελϚΠζ͕Γ͢ ͍ɻ -
ϩάϏϡʔϫʔ͕͋Γ͔ͦ͜Βϝʔϧͷ࠶ૹ͕Ͱ͖ɺࣗલͷϩάཧ ෆཁɻ - ཧऀҎ֎ͷݖݶͰϢʔβൃߦ͕ग़དྷΔɻ →ඇΤϯδχΞͷνʔϜʹτϥϒϧγϡʔτϝʔϧੳΛґཔͰ͖Δɻ
MailgunͷσϝϦοτ ʲσϝϦοτʳ - RFC४ڌ͍ͯ͠ͳ͍ຊͷΩϟϦΞಠࣗڐ༰ͷϝʔϧΞυϨε ͷ৴Λແ༻Ͱ͘ɻ →ʮ
[email protected]
ʯʮ
[email protected]
ʯͳͲ - ͦͦ͜͜ߴՁͰAmazon SESͷ4ഒఔɻ
MailgunͷWebhook - MailgunʹಛఆͷΠϕϯτൃੜ࣌ʹΞϓϦʹΠϕϯτ௨Λ POST͢ΔWebhook͕͋ΓɺͦΕΛར༻͍ͯ͘͠ɻ - Webhook༷ʑ༻ҙ͞Ε͍ͯΔ͕ɺࠓճdelivered(৴)ɾ opened(։෧)ɾclicked(ΫϦοΫ)Λར༻͢Δɻ - ઃఆ୯ҐυϝΠϯ୯Ґ͔ϝʔϧ୯ҐͰઃఆͰ͖Δɻ ※ࢀߟ
- WebhookͷҰཡɿhttps://documentation.mailgun.com/en/latest/api- webhooks.html#webhooks - Webhookͷ͍ํΨΠυɿhttps://www.mailgun.com/guides/your-guide-to-webhooks/
Webhook͔ΒPOST͞ΕΔύϥϝʔλྫ - `event-data`ͱ͍͏ͷϋογϡΩʔͷόϦϡʔͱ͠ ͯҎԼ͕֨ೲ͞ΕΔɻ
࣮खॱ 1. ϝʔϧػೳΛHTMLϝʔϧܗࣜͰ࣮͢Δɻ →Mailgunͷ։෧֬ೝϝʔϧʹࣗಈͰຒΊࠐ·Εͨը૾͕։͔Ε͔ͨʹΑͬͯఆ͞ΕΔͨ ΊɺϓϨʔϯςΩετϝʔϧͰ։෧֬ೝग़དྷͳ͍ɻ 2. ֤ϝʔϧͷϔομʔʹMailgunͷWebhookΛൃՐ͢ΔͨΊͷΩʔόϦϡʔΛࠐ Ήɻ →ࠓճυϝΠϯ୯ҐͰͳ͘ɺϝʔϧ୯ҐͰߦ͏ɻ 3.
MailgunଆʹWebhook࣮ߦ࣌ͷPOSTઌͷURLΛઃఆ͢Δɻ 4. POST͞ΕͨσʔλΛRailsଆͰड͚औͬͯɺϏδωεϩδοΫʹ߹ΘͤͯΑ͠ͳʹ ࣮͢Δɻ
࣮खॱ 1. ϝʔϧػೳΛHTMLϝʔϧܗࣜͰ࣮͢Δɻ →Mailgunͷ։෧֬ೝϝʔϧʹࣗಈͰຒΊࠐ·Εͨը૾͕։͔Ε͔ͨʹΑͬͯఆ͞ΕΔͨ ΊɺϓϨʔϯςΩετϝʔϧͰ։෧֬ೝग़དྷͳ͍ɻ 2. ֤ϝʔϧͷϔομʔʹMailgunͷWebhookΛൃՐ͢ΔͨΊͷΩʔόϦϡʔΛࠐ Ήɻ →ࠓճυϝΠϯ୯ҐͰͳ͘ɺϝʔϧ୯ҐͰߦ͏ɻ 3.
MailgunଆʹWebhook࣮ߦ࣌ͷPOSTઌͷURLΛઃఆ͢Δɻ 4. POST͞ΕͨσʔλΛRailsଆͰड͚औͬͯɺϏδωεϩδοΫʹ߹ΘͤͯΑ͠ͳʹ ࣮͢Δɻ ͜Ε͔Βઆ໌͢Δ෦
ϝʔϧͷϔομʔઃఆ - ϝʔϧૹ৴ॲཧͷafter_actionͰMailgunͷ։෧֬ೝɾ ΫϦοΫ֬ೝͷͨΊͷϔομʔΛ༩͢Δɻ (ड৴֬ೝϔομʔͷઃఆ͕ෆཁɻ) - ࢠͷMailerΫϥε - ͷApplicationMailerΫϥε
࣮ࡍͷϝʔϧͷϔομʔ - ૹ৴͞Εͨϝʔϧͷϔομʔʹ։෧֬ೝͱΫϦοΫ֬ ೝͷͨΊͷ`X-Mailgun-Track`͕ઃఆ͞ΕΔɻ
MailgunͷWebhookઃఆ - RailsΞϓϦͷWebhookͷPOSTઌΛMailgunͷ Webhookʹઃఆ͢Δɻ - Mailgunଆͷઃఆ - RailsଆͷϧʔςΟϯάઃఆ (ɿPathμϛʔͰ͢)
RailsͰWebhookͷPOSTΛड͚ͯͷॲཧ - Mailgun͔ΒͷPOSTΛड͚࣮ͯߦ͢ΔॲཧΛRailsʹ࣮͢ Δɻ - `event-data`Լʹ͋Δ`event`ʹԠͯ͡ॲཧΛذͤ͞Δɻ
ૹ৴݁Ռ֬ೝը໘Ͱͷ֬ೝ - ࠷ޙʹRailsΞϓϦଆͷૹ৴݁Ռ֬ೝը໘͔ΒνΣοΫ͢Δɻ - ԼهͷྫͰड৴֬ೝͰ͢ɻ
্खʹग़དྷ·ͨ͠ʂ
ҙ 1. Mailgunͷ։෧֬ೝϝʔϧʹࣗಈͰຒΊࠐ·Εͨ ը૾͕։͔Ε͔ͨʹΑͬͯఆ͞ΕΔͨΊɺϓϨʔϯς ΩετϝʔϧඇରԠɻ 2. େྔͷϝʔϧΛMailgunܦ༝Ͱૹ৴͢ΔͱMailgun ΤϥʔʹͳΒͣʹਖ਼ৗʹૹ৴ॲཧΛߦͬͯ͘ΕΔɻ →ಉ࣌ʹେྔͷWebhook͕ΞϓϦέʔγϣϯʹPOST͞ ΕΔͨΊɺηϧϑDoS߈ܸঢ়ଶʹͳͬͯ͠·͏ɻ
(࣮ࡍʹͦΕͰΞϓϦέʔγϣϯ͕1མͪ·ͨ͠…)
͓ΘΓʹ - MailgunͷWebhookػೳΛར༻͢Δ͜ͱͰૹ৴ϝʔ ϧͷड৴֬ೝɾ։෧֬ೝɾΫϦοΫ֬ೝΛ؆୯ʹग़དྷ ·ͨ͠ɻ - ੳ͕खܰʹͰ͖Δ͜ͱࣄۀͷʹ݁͢ΔͷͰ େࣄɻ - ͱ͍͑ɺMailgunΛ༻͠ͳ͍ଞͷํ๏͋Δͱࢥ
͍·͢ͷͰɺ৭ʑڭ͚͑ͯΔͱخ͍͠Ͱ͢ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ