Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Webサービスのバウンスメール処理の事始め

tanden
April 10, 2022

 Webサービスのバウンスメール処理の事始め

PHPerKaigi2022 LTの発表資料です
https://fortee.jp/phperkaigi-2022/proposal/aa914ded-66e5-4480-ace2-7a3fe3b556fe

Webサービスを運営していると、サービスからユーザーにせっかく送ったメールが届かないことがあります。
そのような、何らかの理由で目的のユーザーの元に届かなかったメール=バウンスメールをどう処理するかは、サービスにとって避けては通れない課題なのではないでしょうか。
また、AWS SESを使っている場合、バウンスメールの数が多すぎるとペナルティがあったりするなど、サービスにとってバウンスメール処理は意外に大事なものだったりします。
このLTでは、そもそもバウンスメールとは何なのか、AWS SESをつかってバウンスメールをサービスにフィードバックするまでを発表します

tanden

April 10, 2022
Tweet

More Decks by tanden

Other Decks in Programming

Transcript

  1. © 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 2022/04/10 PHPerKaigi2022

    LT 炭田高輝(@tac_tanden) Webサービスのバウンスメール処理の事始め
  2. © 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
  3. © 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 今日のLTのまとめ② レピュテーションの

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

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

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

    SMTP メールサーバー メールサーバー SMTP バウンスメール - 何らかの理由で正常に配信されなかったメールのこと(bounced mail) バウンスメッセージ - バウンスしたことを発信者に通知する自動返信メール - SMTPではバウンスした場合に発信者に通知すべき、としている(MUSTではない) tandenという ユーザはいないな... バウンスメッセージを返信
  7. © 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンスメールを2種類に分ける インターネットの世界で電子メールの利用が増えるにつれて、スパム(spam)メールが問題

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

    2 3 バウンスメールとは Amazon SESにおけるバウンス通知 バウンス通知を受け取って利用する方法 10
  9. © 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
  10. © 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
  11. © 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
  12. © 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
  13. © 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. サプレッションリスト グローバルサプレッションリスト

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

    2 3 バウンスメールとは Amazon SESにおけるバウンス通知 バウンス通知を受け取って利用する方法 19
  17. © 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 バウンス通知
  18. © 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
  19. © 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. バウンス情報をサービスで利用する 自前のサプレッションリストやソフトバウンスリストを作る

    SQSを介してLambdaなどを使って、サービスから参照しやすい形で自前のサプレッション リストを作ることができる メール送信前に自前のサプレッションリストを参照してメールを送らない、などに利用でき る 23 バウンス通知 Amazon SES Amazon SNS Amazon SQS AWS Lambda
  20. © 2012-2019 BASE, Inc. © 2012-2022 BASE, Inc. 今日のLTのまとめ(再掲) レピュテーションの

    悪化を防ぐ(※) 一時的に未達だった メールの再送をする メール配信サービスの 停止を避ける(※) 24 ※苦情(Complaint)の話もありますが今回はバウンスのみ取り上げます