Slide 1

Slide 1 text

Gotanda.rb#47 Mailgun3෼ΫοΩϯά 2020/10/27 גࣜձࣾτϨλ @hiroki_tanaka

Slide 2

Slide 2 text

ࣗݾ঺հ ɾాத ޺جɿ@hiroki_tanaka ɾSIerɿϑϡʔνϟʔΞʔΩςΫτ(4೥ؒ) →WebܥϕϯνϟʔɿגࣜձࣾτϨλ(1೥ؒ) ɾRubyɿ2೥൒ɾJavaɿ2೥൒ɾSQLɿ5೥ →࠷ۙ͸ΠϯϑϥΤϯδχΞݟश͍தɻ ɾझຯɿεϓϥτΡʔϯɾમ౬८Γ

Slide 3

Slide 3 text

αʔϏε঺հ - τϨλ͸ҿ৯ళ޲͚ͷ༧໿୆ாɾސ٬୆ா͕ϝΠϯ ϓϩμΫτɻ(࠷ۙͩͱGoToEatʹ΋ࢀՃ͍ͯ͠·͢ɻ)

Slide 4

Slide 4 text

αʔϏε঺հ - ίϩφՒʹҿ৯ళ͕͜Ε·ͰஷΊ͖ͯͨ୆ாͷސ٬ʹ DMΛҰׅૹ৴ग़དྷΔʮτϨλϝοηʔδʯͱ͍͏αʔ Ϗε͕ੜ·Εͨɻ

Slide 5

Slide 5 text

ࠓ೔࿩͢͜ͱɾ࿩͞ͳ͍͜ͱ ʲ࿩͢͜ͱʳ - RailsͱMailgunΛ༻͍ͨૹ৴ϝʔϧͷड৴֬ೝɾ։෧֬ೝɾ URLͷΫϦοΫ֬ೝͷऔಘʹ͍ͭͯ (MailgunΛ஌͍ͬͯΔਓʹͱͬͯ͸جຊతͳ࿩Λ͢ΔͷͰɺऍᷟʹઆ๏͔΋Ͱ͢…) ʲ࿩͞ͳ͍͜ͱʳ - ϝʔϧؔ࿈ͷgem →ruby-gmail΍letter_opener_webͳͲ - ActionMailerͷ࢖͍ํ

Slide 6

Slide 6 text

ϝʔϧͰ͋Γ͕ͪͳཁ๬͕ τϨλϝοηʔδͰ΋͋Γ·ͨ͠ɻ

Slide 7

Slide 7 text

γεςϜ͔Βૹ৴ͨ͠ϝʔϧ͕Ͳͷఔ౓ड৴ ͞Ε͔ͨ஌Γ͍ͨɻ

Slide 8

Slide 8 text

ૹ৴ͨ͠ϝʔϧͷ಺ɺԿ%͕։෧͞ Εͯຊจ಺ͷURL͕Ͳͷఔ౓ΫϦοΫ͞Ε͔ͨ ஌Γ͍ͨɻ

Slide 9

Slide 9 text

Ͳ͏΍࣮ͬͯݱ͠Α͏ʁ

Slide 10

Slide 10 text

ϝʔϧૹ৴ʹඞཁͳESPଆͰ Կͱ͔ग़དྷͳ͍͔ͳ…ʁ

Slide 11

Slide 11 text

ESPͱ͸ - ESPͱ͸Email Service ProdiverͷུͰిࢠϝʔϧ഑৴ γεςϜ΍αʔϏεΛఏڙ͢Δࣄۀऀͷ͜ͱɻ - ಛʹϚʔέςΟϯάϝʔϧ΍τϥϯβΫγϣϯϝʔϧ(༧໿֬ ೝϝʔϧͳͲ)ͱ͍ͬͨࣄۀʹ௚݁͢Δϝʔϧͷ഑৴͕ओɻ - ༗໊ॴͩͱSendGrid΍MailChimpɾAmazon SESɻ - ޿ٛʹ͸Gmail΍yahooϝʔϧ΋֘౰͢Δɻ

Slide 12

Slide 12 text

ࠓճ࢖༻͢ΔESPɿMailgun - ࠓճ͸Mailgunͱ͍͏ESPΛ࢖༻ɻ - Mailgun Technologies Inc͕ఏڙ͍ͯ͠ΔαʔυύʔςΟͷ Ϋϥ΢υϝʔϧαʔϏεɻ - ຖ݄࠷େ1ສ௨·ͰແྉͰϝʔϧΛૹ৴Ͱ͖ΔͷͰɺखܰʹ ελʔτग़དྷΔɻ (Googleύʔτφʔϖʔδ͔ΒͷਃࠐΈͩͱ3ສ௨·Ͱແྉɻ)

Slide 13

Slide 13 text

MailgunͷϝϦοτ ʲϝϦοτʳ - ॳظઃఆ͕؆୯ɻ →ΞΧ΢ϯτ࡞੒~Mailgunઃఆ~DNSઃఆ~RailsଆʹͦͷMailgunઃఆΛద༻͢Δ͚ͩ Ͱɺ͙͢ʹϝʔϧૹ৴ՄೳʹͳΔɻ - APIΛެ։͍ͯ͠ΔͷͰɺϓϩάϥϜ͔ΒͷΧελϚΠζ͕΍Γ΍͢ ͍ɻ - ϩάϏϡʔϫʔ͕͋Γ͔ͦ͜Βϝʔϧͷ࠶ૹ͕Ͱ͖ɺࣗલͷϩά؅ཧ ෆཁɻ - ؅ཧऀҎ֎ͷݖݶͰϢʔβൃߦ͕ग़དྷΔɻ →ඇΤϯδχΞͷνʔϜʹτϥϒϧγϡʔτ΍ϝʔϧ෼ੳΛґཔͰ͖Δɻ

Slide 14

Slide 14 text

MailgunͷσϝϦοτ ʲσϝϦοτʳ - RFC४ڌ͍ͯ͠ͳ͍೔ຊͷΩϟϦΞಠࣗڐ༰ͷϝʔϧΞυϨε ΁ͷ഑৴Λ໰౴ແ༻Ͱ஄͘ɻ →ʮa..a@example.comʯ΍ʮtest.@example.comʯͳͲ - ͦͦ͜͜ߴՁͰAmazon SESͷ4ഒఔ౓ɻ

Slide 15

Slide 15 text

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/

Slide 16

Slide 16 text

Webhook͔ΒPOST͞ΕΔύϥϝʔλྫ - `event-data`ͱ͍͏਌ͷϋογϡΩʔͷόϦϡʔͱ͠ ͯҎԼ͕֨ೲ͞ΕΔɻ

Slide 17

Slide 17 text

࣮૷खॱ 1. ϝʔϧػೳΛHTMLϝʔϧܗࣜͰ࣮૷͢Δɻ →Mailgunͷ։෧֬ೝ͸ϝʔϧ಺ʹࣗಈͰຒΊࠐ·Εͨը૾͕։͔Ε͔ͨʹΑͬͯ൑ఆ͞ΕΔͨ ΊɺϓϨʔϯςΩετϝʔϧͰ͸։෧֬ೝग़དྷͳ͍ɻ 2. ֤ϝʔϧͷϔομʔʹMailgunͷWebhookΛൃՐ͢ΔͨΊͷΩʔόϦϡʔΛ࢓ࠐ Ήɻ →ࠓճ͸υϝΠϯ୯ҐͰ͸ͳ͘ɺϝʔϧ୯ҐͰߦ͏ɻ 3. MailgunଆʹWebhook࣮ߦ࣌ͷPOSTઌͷURLΛઃఆ͢Δɻ 4. POST͞ΕͨσʔλΛRailsଆͰड͚औͬͯɺϏδωεϩδοΫʹ߹ΘͤͯΑ͠ͳʹ ࣮૷͢Δɻ

Slide 18

Slide 18 text

࣮૷खॱ 1. ϝʔϧػೳΛHTMLϝʔϧܗࣜͰ࣮૷͢Δɻ →Mailgunͷ։෧֬ೝ͸ϝʔϧ಺ʹࣗಈͰຒΊࠐ·Εͨը૾͕։͔Ε͔ͨʹΑͬͯ൑ఆ͞ΕΔͨ ΊɺϓϨʔϯςΩετϝʔϧͰ͸։෧֬ೝग़དྷͳ͍ɻ 2. ֤ϝʔϧͷϔομʔʹMailgunͷWebhookΛൃՐ͢ΔͨΊͷΩʔόϦϡʔΛ࢓ࠐ Ήɻ →ࠓճ͸υϝΠϯ୯ҐͰ͸ͳ͘ɺϝʔϧ୯ҐͰߦ͏ɻ 3. MailgunଆʹWebhook࣮ߦ࣌ͷPOSTઌͷURLΛઃఆ͢Δɻ 4. POST͞ΕͨσʔλΛRailsଆͰड͚औͬͯɺϏδωεϩδοΫʹ߹ΘͤͯΑ͠ͳʹ ࣮૷͢Δɻ ͜Ε͔Βઆ໌͢Δ෦෼

Slide 19

Slide 19 text

ϝʔϧͷϔομʔઃఆ - ϝʔϧૹ৴ॲཧͷafter_actionͰMailgunͷ։෧֬ೝɾ ΫϦοΫ֬ೝͷͨΊͷϔομʔΛ෇༩͢Δɻ (ड৴֬ೝ͸ϔομʔͷઃఆ͕ෆཁɻ) - ࢠͷMailerΫϥε - ਌ͷApplicationMailerΫϥε

Slide 20

Slide 20 text

࣮ࡍͷϝʔϧͷϔομʔ - ૹ৴͞Εͨϝʔϧͷϔομʔʹ։෧֬ೝͱΫϦοΫ֬ ೝͷͨΊͷ`X-Mailgun-Track`͕ઃఆ͞ΕΔɻ

Slide 21

Slide 21 text

MailgunͷWebhookઃఆ - RailsΞϓϦ΁ͷWebhookͷPOSTઌΛMailgunͷ Webhookʹઃఆ͢Δɻ - Mailgunଆͷઃఆ - RailsଆͷϧʔςΟϯάઃఆ (஫ɿPath͸μϛʔͰ͢)

Slide 22

Slide 22 text

RailsͰWebhookͷPOSTΛड͚ͯͷॲཧ - Mailgun͔ΒͷPOSTΛड͚࣮ͯߦ͢ΔॲཧΛRailsʹ࣮૷͢ Δɻ - `event-data`഑Լʹ͋Δ`event`ʹԠͯ͡ॲཧΛ෼ذͤ͞Δɻ

Slide 23

Slide 23 text

ૹ৴݁Ռ֬ೝը໘Ͱͷ֬ೝ - ࠷ޙʹRailsΞϓϦଆͷૹ৴݁Ռ֬ೝը໘͔ΒνΣοΫ͢Δɻ - ԼهͷྫͰ͸ड৴֬ೝͰ͢ɻ

Slide 24

Slide 24 text

্खʹग़དྷ·ͨ͠ʂ

Slide 25

Slide 25 text

஫ҙ఺ 1. Mailgunͷ։෧֬ೝ͸ϝʔϧ಺ʹࣗಈͰຒΊࠐ·Εͨ ը૾͕։͔Ε͔ͨʹΑͬͯ൑ఆ͞ΕΔͨΊɺϓϨʔϯς Ωετϝʔϧ͸ඇରԠɻ 2. େྔͷϝʔϧΛMailgunܦ༝Ͱૹ৴͢ΔͱMailgun͸ ΤϥʔʹͳΒͣʹਖ਼ৗʹૹ৴ॲཧΛߦͬͯ͘ΕΔɻ →ಉ࣌ʹେྔͷWebhook͕ΞϓϦέʔγϣϯʹPOST͞ ΕΔͨΊɺηϧϑDoS߈ܸঢ়ଶʹͳͬͯ͠·͏ɻ (࣮ࡍʹͦΕͰΞϓϦέʔγϣϯ͕1౓མͪ·ͨ͠…)

Slide 26

Slide 26 text

͓ΘΓʹ - MailgunͷWebhookػೳΛར༻͢Δ͜ͱͰૹ৴ϝʔ ϧͷड৴֬ೝɾ։෧֬ೝɾΫϦοΫ֬ೝΛ؆୯ʹग़དྷ ·ͨ͠ɻ - ෼ੳ͕खܰʹͰ͖Δ͜ͱ͸ࣄۀͷ੒௕଎౓ʹ΋௚݁͢ΔͷͰ େࣄɻ - ͱ͸͍͑ɺMailgunΛ࢖༻͠ͳ͍ଞͷํ๏΋͋Δͱࢥ ͍·͢ͷͰɺ৭ʑڭ͑ͯ௖͚Δͱخ͍͠Ͱ͢ʂ

Slide 27

Slide 27 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ