GoogleのGmailとYahooメールが要求するワンクリック解除とは何か?
はじめに
こんにちは。SHIFT DAAE(ダーエ)の栗山です。
2024年の2月より、Gmailに1日に5000通以上のメールを送信する場合はワンクリックによるメール購読解除機能を実装することが求められるようになりました。ソース 。
Yahooメールでも同様のことが求められるようになりました。ソース
本稿ではこの「ワンクリックによるメール購読解除機能」がどのようなものなのかを説明し、RFC8058の定義を確認し、実装上のポイントを解説します。
ワンクリックによるメール購読解除機能とは?
これはメールを受信した際に、文字通り 「ワンクリックでメールの購読を解除できる」 機能です。
よくある以下のような機能ではないので注意しましょう。
「メールにあるリンク先に遷移後、その画面で操作してメールの購読を解除できる」※このような機能ではないので注意!
実際にGmailでの例を見てみましょう。
以下はGmailに来たGoogleニュースの通知メールです。右上に「登録解除」というリンクがあります。
これを押下すると、以下の画面に遷移しメール購読の解除が完了した旨が表示されました。確かに「ワンクリックでメールの購読を解除」することができました。
※後述しますが、必ずしもこのGoogleの例のように「登録解除リンクを押下後にこういった画面に遷移する」必要はありません。この動作は一例とお考え下さい。
「Manage emails from Google」のリンクからメール管理画面に遷移すると、GoogleニュースのDaily briefingの購読が解除されていることがわかります。
対象のメールは?
ワンクリックによるメール購読解除の対象となるメールは以下の2種です。ソース
マーケティング目的のメール
購読メール
「購読メール」が何であるかわかりづらいですね。これについては、システムを運用するために最低限必要なメール以外は「購読メールとして、ワンクリックによるメール購読解除ができる必要がある」と私は解釈しています。
この理由は、そもそもの今回の措置の目的は、ユーザーが快適にメールを使用できるように、ユーザーのメールボックスがユーザーにとって不要なメールで一杯にならないようにすることであると考えられるからです。
またスパムメールと判定されないためにも、ユーザーにとって不要なメールは簡単に購読解除できるようにすることが有効です。
実装方法の概要
これはこちら に記載の通りです。
以下の2つのヘッダーをメールに加えます。コロンの左側がヘッダー名で、右側が値です。
List-Unsubscribe-Post: List-Unsubscribe=One-Click
List-Unsubscribe: <https://some-system.jp/unsubscribe/example>
要は、メール購読解除のエンドポイントを作成し、そのURLをList-Unsubscribeに指定するわけです。
ここで「認証をどうするか?」「ユーザーや購読解除対象のメールをどう判定するのか?」といったことが疑問になりますね。それについては次章をご覧ください。
ワンクリックによるメール購読解除機能の定義と実装のポイント
定義についてはRFC8058のSection3 を見るのが分かりやすいです。 以下、3つのポイントに分けて記します。
一つ目のポイントは以下の記載です。
The unsubscribe operation is logically
unrelated to any previous web activity, and context information could
inappropriately link the unsubscribe to previous activity.
これは前後の操作なしにメールの購読を解除できる、ということを言っています。上述しましたが、「ワンクリックでメール購読解除できる」ということです。
2つ目のポイントは以下です。
The URI SHOULD include an opaque identifier or another hard-to-forge
component in addition to, or instead of, the plaintext names of the
list and the subscriber. The server handling the unsubscription
SHOULD verify that the opaque or hard-to-forge component is valid.
This will deter attacks in which a malicious party sends spam with
List-Unsubscribe links for a victim list, with the intention of
causing list unsubscriptions from the victim list as a side effect of
users reporting the spam, or where the attacker does POSTs directly
to the mail sender's unsubscription server.
こちらには、攻撃防止のための措置が記載してあります。
List-Unsubscribeヘッダーに設定するURLには、「誰がどのメールの購読を解除するのか?」といった情報を含める必要があります。これはURLにパラメーターを加えるなどして表現するわけですが、その際に、ユーザーIDなどを直接記載せず、一時的に生成したランダムなIDで、ユーザーや購読解除対象のメール判定できるようにする必要がある、ということです。
例を挙げると、以下のようになります。
List-Unsubscribe: <https://some-system.jp/unsubscribe/example?param=AjisfiejPJIOJFE89734JLJF>
あとは、DB側で「AjisfiejPJIOJFE89734JLJF」に対して、ユーザーや購読解除対象のメールの情報を紐づけしておけばよいです。
こちらが前章で疑問として挙げた以下項目の答えとなります。
認証をどうするか?
ユーザーや購読解除対象のメールをどう判定するのか?
最後の3つ目のポイントです。
RFC8058のSection3 を見る限り、ワンクリックでメール購読解除できる機能に対して、以下のような仕様は求められていないことです。
即座にメール購読解除できること。
メール購読解除リンクを押下後、ユーザーがメール管理画面に遷移できること。
Googleの例では、メール購読解除リンクを押下後、その流れでメール管理画面に遷移できました。これはとても使いやすい仕様だと思いますが、ここまでの実装は求められていないということです。
また、「即座にメール購読解除できる」といった要件もないようで、これについてはYahooでは2日以内に購読停止されること を求めています。
最後に
本稿が皆様のお役に立てば幸いです。
同種の記事でGmailの迷惑メール対策が強化! Amazon SESを使用している場合の対応の概説 もお役に立つかもしれません。
■DAAEマガジン
\もっと身近にもっとリアルに!DAAE公式X/
《このブロガーの記事》
お問合せはお気軽に
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのSolen Feyissa