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サービスのバウンスメール処理の事始め

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  5. © 2012-2019 BASE, Inc.
    © 2012-2022 BASE, Inc.
    目次



    バウンスメールとは
    Amazon SESにおけるバウンス通知
    バウンス通知を受け取って利用する方法
    5

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. © 2012-2019 BASE, Inc.
    © 2012-2022 BASE, Inc.
    目次



    バウンスメールとは
    Amazon SESにおけるバウンス通知
    バウンス通知を受け取って利用する方法
    10

    View Slide

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

    View Slide

  12. © 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

    View Slide

  13. © 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

    View Slide

  14. © 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

    View Slide

  15. © 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

    View Slide

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

    View Slide

  17. © 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

    View Slide

  18. © 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

    View Slide

  19. © 2012-2019 BASE, Inc.
    © 2012-2022 BASE, Inc.
    目次



    バウンスメールとは
    Amazon SESにおけるバウンス通知
    バウンス通知を受け取って利用する方法
    19

    View Slide

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

    View Slide

  21. © 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
    バウンス通知

    View Slide

  22. © 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

    View Slide

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

    23
    バウンス通知
    Amazon SES Amazon SNS Amazon SQS AWS Lambda

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide