Slide 1

Slide 1 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 2022/04/10 PHPerKaigi2022 LT 炭田高輝(@tac_tanden) Webサービスのバウンスメール処理の事始め

Slide 2

Slide 2 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 自己紹介 BASE株式会社 Product Dev Division エンジニアリングマネージャー 2016.09 - 新卒でWebゲーム開発 2020.01 - BASE株式会社で『BASE』の開発 よろしくお願いします!     炭田高輝(tanden) Back-End Web Developer 2

Slide 3

Slide 3 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 今日のLTのまとめ① バウンスメールの通知を使って より確実にユーザにメールを届ける 3

Slide 4

Slide 4 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 今日のLTのまとめ② レピュテーションの 悪化を防ぐ(※) 一時的に未達だった メールの再送をする メール配信サービスの 停止を避ける(※) 4 ※苦情(Complaint)の話もありますが今回はバウンスのみ取り上げます

Slide 5

Slide 5 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 目次 1 2 3 バウンスメールとは Amazon SESにおけるバウンス通知 バウンス通知を受け取って利用する方法 5

Slide 6

Slide 6 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンスメールとは 6

Slide 7

Slide 7 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. SMTP (Simple Mail Transfer Protocol) 7 SMTP メールサーバー メールサーバー SMTP POP / IMAP メール送信用プロトコル - SMTP メール取得用プロトコル - POP - IMAP ※DNSのMXレコードで配送先を解決する部分は省略

Slide 8

Slide 8 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンスメールとは何か 8 SMTP メールサーバー メールサーバー SMTP バウンスメール - 何らかの理由で正常に配信されなかったメールのこと(bounced mail) バウンスメッセージ - バウンスしたことを発信者に通知する自動返信メール - SMTPではバウンスした場合に発信者に通知すべき、としている(MUSTではない) tandenという ユーザはいないな... バウンスメッセージを返信

Slide 9

Slide 9 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンスメールを2種類に分ける インターネットの世界で電子メールの利用が増えるにつれて、スパム(spam)メールが問題 になってしまった。 そのため、送信者の正当性を評価するために、バウンスを2種類に分ける。 ハードバウンス(Hard bounces) レピュテーションへのダメージがより大きい。 ドメインが正しくない場合や、配送先のメールサーバーが完全にメールを受け付けないよう になっている場合に発生する。 ソフトバウンス(Soft bounces) 一時的なメールの不達。 配送先のメールボックスが一杯の場合や、一時的な配送先のメールサーバーのエラーなどで 発生する。時間を空けてから再度メールを送信するとメールが到達する可能性がある。 9

Slide 10

Slide 10 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 目次 1 2 3 バウンスメールとは Amazon SESにおけるバウンス通知 バウンス通知を受け取って利用する方法 10

Slide 11

Slide 11 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. Amazon SESにおける バウンス通知 11

Slide 12

Slide 12 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. Amazon SESとは Amazon Simple Email Service 『Amazon Simple Email Service (SES) は、デベロッパーが任意のアプリケーションでメー ルを送信できるようにする、費用対効果の高い、柔軟でスケーラブルなメールサービスで す。』(https://aws.amazon.com/jp/ses/) Amazon SESはSMTPを使用してメールを送信する、AWSが提供するメールサービス。 12

Slide 13

Slide 13 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. Amazon SESのバウンス通知は3種類 Amazon SESが定義しているバウンスメッセージは3種類 - Undetermined - Permanent - Transient “Undermined”は文字通り「決められなかった」もの。バウンスの種類を決めるだけの情報 がバウンスメッセージに含まれていない場合に割り当てられます。 そして、“Permanent”がハードバウンス、”Transient”がソフトバウンスにあたります。 上記の3種類に加えて、バウンスサブタイプ(Bounce sub type)も含めると合わせて10種 類に分類されてSESの利用者に通知されます。 13

Slide 14

Slide 14 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンス率の目安 理想は2%未満にバウンス率を抑えること。 『最良の結果を得るには、バウンス率を 2% 未満に維持する必要があります。これより高い バウンス率は、E メールの配信に影響する可能性があります。』 5%以上はイエローカード、10%以上はレッドカード 『バウンス率が 5% 以上になると、アカウントはレビュー対象になります。バウンス率が 10% 以上の場合は、高いバウンス率の原因となった問題が解決するまで、以後の E メール 送信を一時停止することがあります。』 Webサービスで必要なメール送信機能に影響が出てしまう。 引用:https://docs.aws.amazon.com/ja_jp/ses/latest/dg/faqs-enforcement.html#e-faq-bn 14

Slide 15

Slide 15 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. Amazon SESはなぜバウンス率を重視するのか 高いバウンス率は送信者の評価(レピュテーション)を下げ、メールが配信されてもスパム 扱いになってしまう可能性がある。 『高いバウンス率は、E メールプロバイダーやアンチ スパム組織などのエンティティで、不 良な E メール送信プラクティスに関与している送信者を検出するためによく使用されます。 高いバウンス率は、E メールが受信トレイではなく迷惑メールフォルダに送信される原因に なる可能性があります。』 結果として、ユーザに届けたいメールが届かない。 引用:https://docs.aws.amazon.com/ja_jp/ses/latest/dg/faqs-enforcement.html#e-faq-bn 15

Slide 16

Slide 16 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. サプレッションリスト グローバルサプレッションリスト Amazon SESで管理する、過去にハードバウンスしたメールアドレスのリスト。 全SESアカウントのハードバウンスしたメールアドレスが一定期間リストに追加される。 Amazon SESはメール送信を受け付けるが、メールは実際には送信されない。 送信されないがアカウントのバウンス率にカウントされてしまう。 アカウントレベルサプレッションリスト この設定を有効にすると、グローバルサプレッションリストを上書きできる。 アカウントレベルでハードバウンスしたメールアドレスを追加・削除できる。 Amazon SESはメール送信を受け付けるが、メールは実際には送信されない。 アカウントのバウンス率にカウントされない。 16

Slide 17

Slide 17 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. まずはサプレッションリストの設定をする バウンス率を抑制するために まずはAmazon SESのアカウントレベルサプレッションリストを有効化する 『2019 年 11 月 25 日以降に Amazon SES の使用を開始した場合、アカウントはバウンス と苦情の両方に対してアカウントレベルのサプレッションリストをデフォルトで使用しま す。』(https://docs.aws.amazon.com/ja_jp/ses/latest/dg/sending-email-suppression-list.html) 2019年11月25日以前にAmazon SESの利用を開始している場合は、手動で設定する 17 aws sesv2 put-account-suppression-attributes \ --suppressed-reasons BOUNCE COMPLAIN

Slide 18

Slide 18 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. より確実にユーザにメールを届けるために 複数リージョンを使い分けてメール配信を行う場合はサプレッションリストを自前で構築し たいところ 『Your Amazon SES account-level suppression list applies to your AWS account only in the current AWS Region.』(サプレッションリストはリージョン内のみに適用) (https://docs.aws.amazon.com/ses/latest/dg/regions.html#region-suppression-list) ソフトバウンスの時はサービス側で再送が必要になる場合がある なので、そのための情報も残したい - ソフトバウンスの再送はAmazon SESがよしなにやってくれる場合もある - 配信元/配送先の障害でAWS側から「必要であれば再送お願いします」と言われ、再送処理 を実施したことがある 18

Slide 19

Slide 19 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 目次 1 2 3 バウンスメールとは Amazon SESにおけるバウンス通知 バウンス通知を受け取って利用する方法 19

Slide 20

Slide 20 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンス通知を受け取って 利用する方法 20

Slide 21

Slide 21 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンス通知を受信する Amazon SESは様々な通知を利用者にしてくれる - トップレベル JSON オブジェクト - mail オブジェクト - bounce オブジェクト - complaint オブジェクト - delivery オブジェクト bounceの通知をSNSに向けるように設定する 出典:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ses/set-identity-notification-topic.html 21 aws ses set-identity-notification-topic --identity [email protected] --notification-type Bounce --sns-topic arn:aws:sns:us-east-1:EXAMPLE65304:MyTopic バウンス通知

Slide 22

Slide 22 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. おそらく一番シンプルな保存方法 SNSに通知してしまえばこっちのもの まずはシンプルにS3に保存したい場合(ログが残っていることがまず大事) SES→SNS→Firehose→S3の構成にするのがおそらく一番シンプル方法な方法? 22 バウンス通知 Amazon SNS Amazon Kinesis Data Firehose Amazon S3 Amazon Athena Amazon SES

Slide 23

Slide 23 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンス情報をサービスで利用する 自前のサプレッションリストやソフトバウンスリストを作る SQSを介してLambdaなどを使って、サービスから参照しやすい形で自前のサプレッション リストを作ることができる メール送信前に自前のサプレッションリストを参照してメールを送らない、などに利用でき る 23 バウンス通知 Amazon SES Amazon SNS Amazon SQS AWS Lambda

Slide 24

Slide 24 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 今日のLTのまとめ(再掲) レピュテーションの 悪化を防ぐ(※) 一時的に未達だった メールの再送をする メール配信サービスの 停止を避ける(※) 24 ※苦情(Complaint)の話もありますが今回はバウンスのみ取り上げます

Slide 25

Slide 25 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 今日のLTのまとめ(再掲) バウンスメールの通知を使って より確実にユーザにメールを届ける 2

Slide 26

Slide 26 text

© 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. ご清聴 ありがとうございました 26