はじめに
BASE Feature Dev1 Group の cureseven です。
Google と米Yahoo が定めた「メール送信者のガイドライン」が、2024/06/01に対応の最終締め切りを迎えました。
BASE から送信しているプロモーションメールも対応が完了しましたので、対応する過程で起こったトピックを紹介します。
「メール送信者のガイドライン」とはなにか簡単に説明
1回でも月あたり 5,000件以上個人メールにメールを送信したことがあるドメインを持つ「一括送信者」は、以下の規定に則ってメールを送信する必要があります。
- DMARC の対応
- プロモーションメールには、購読解除ヘッダーが挿入されていること
- 迷惑メール率が 0.3%を超えないこと
AWS が出しているこちらの記事がスッキリしていて読みやすいです。
アプリケーション開発チームの私は、購読解除ヘッダーの挿入を主に担当しました。
迷惑メール率は幸運なことに 0.3%未満だったので、減らすための施策を行うことはありませんでした。
サービス関連のメールを全て洗い出す
BASE ではシステムからメールを送信する以外にも、他社サービスを使っています。
いつも扱っているサービスのコードを見るだけでは見落としてしまいそうなメールもあったため、自分で登録している BASE アカウントに対して来たメールを見たり、さまざまなチームに問い合わせたりして、全体像を把握していきました。
BASE には、以下の種類のプロモーションメールがありました。
- バッチで送信しているオーナー向けプロモーションメール
- 購入者がショップから受け取るメルマガ、再入荷自動通知、期間販売通知メール
- 営業チームが使っているメールサービス(SendGrid, kintone)から送信するメール
- 機械学習チームがショップ開設から最適なタイミングで送信するオーナー向け機能紹介メール(Amazon Pinpoint)
「プロモーションメール」なのか「トランザクションメール」なのか
プロモーション メールとトランザクション メールの区別は、業界や適用される規制によって異なります。メールの性質は、Google ではなく受信者が判断します。迷惑メール率が高くなることを防ぐために、マーケティングやプロモーション関連のメール配信の登録をユーザーが簡単に解除できるようにすることを検討しましょう。また、メールを設計する際は、ユーザーを念頭に置くようにしてください。
とあるように、「プロモーションメール」が、業界によって異なる定義であること、判断するのはメールの受け取り手だという記載があります。
チームメンバーに意見を聞きながら、送信しているメールが「プロモーションメール」なのか「トランザクションメール」なのかを判断し分類していきました。
AWSとコミュニケーションを取りながらの実装
予約した時刻にメールを一括送信する機能には、Amazon SES を採用しています。Amazon SESのsendBulkEmailメソッドを使えば複数のメールを一括で送信できます。
AWS SDK for PHP 3.x のドキュメントに従って実装しましたが、sendBulkEMailの仕様通りに実装してもヘッダーが適応がされず困ったため、AWS に問い合わせながら進めました。
問い合わせたところ sendBulkEmail が、送信先ごとのヘッダー挿入に対応したのは 3.305.9
以降とのことで、バージョンアップをすることで解決しました。AWS SDK for PHP 3系ドキュメントに書いてあったため、3系だし大丈夫だろうと思っていました。3.305.9
がリリースされたのは、メールの規定が開始する2週間前でした。
List-Unsubscribeで指定するURLの要件が厳しい
ワンクリック購読解除APIはRFC8058にしたがって実装する必要があり、以下があったことで、工数が膨らみました。
- リクエストパラメータを使ってデータを送信しなければならない
- 個人を特定できるようなデータを送信してはならず、暗号化されていなければならない
既存のAPIを利用すれば購読解除ができないかと思っていましたが、メールクライアントからワンクリックで購読解除を行うために使う API はリクエストボディが使えなかったため、既存のAPI を修正する必要がありました。
また、リクエストパラメータに含めるハッシュ値の暗号化と、復号化の処理を新規で作成することになりました。 AWS のアカウントをまたいで、同じ方法で暗号化したハッシュ値を使って購読解除APIにリクエストする為、AWS KMSを使った方法を採用しました。 AWS KMS を利用して暗号化、復号化ができるようにインフラチームと相談しながら進めました。
開発環境で購読解除リンクが表示されないことがある
開発環境で利用しているドメインからのメールには、購読解除ヘッダーが適切に貼られていても購読解除リンクが出現しない事象がありました。
そのルールが明確に提示されておらず、調査に工数を取られてしまいました。そのため
- API を直接叩き、購読解除できること
- 購読解除ヘッダーが適切に貼られていること
を確認した上でリリースしました。開発環境で購読解除リンクが表示されていなくとも、本番では全ての購読解除ヘッダーが挿入されているメールに購読解除リンクが表示されていました。
今後も対応されるように社内へ周知
エンジニア全体に、対応方法を周知しました。簡単に実装してもらえるように、以下を工夫しました。
- 暗号化、復号化のサービスを作り、それを利用するだけで API のパラメータに利用する hash を作成できるようにしました
- 各メール送信方法に対応するように、購読解除ヘッダーの挿入方法を記載しました
- BASE以外にも、BASE BANK, PayID チームなどがあります。広く周知しました
- 上記の詰まったこともドキュメントにし、開発者の対応が詰まらないようにしました
おわりに
プロモーションメールのワンクリック購読解除は、メールの受け取り手からすると、便利でいい機能ですね。
私のメールボックスも、プロモーションメールでいっぱいになっているので、ポチポチ解除してスッキリさせることができそうです。
規定の適応は開始されていますが、月あたり 5,000 件以上個人メールに送信していないドメインは迷惑メールに入るなどの処置が取られないため、未対応のシステムをお持ちの方もいらっしゃると思います。
今後対応することになった際参考にしていただけると嬉しいです。