見出し画像

GoogleのGmailとYahooメールが要求するワンクリック解除とは何か?


はじめに


こんにちは。SHIFT DAAE(ダーエ)の栗山です。

2024年の2月より、Gmailに1日に5000通以上のメールを送信する場合はワンクリックによるメール購読解除機能を実装することが求められるようになりました。ソース

Yahooメールでも同様のことが求められるようになりました。ソース

本稿ではこの「ワンクリックによるメール購読解除機能」がどのようなものなのかを説明し、RFC8058の定義を確認し、実装上のポイントを解説します。

ワンクリックによるメール購読解除機能とは?


これはメールを受信した際に、文字通り 「ワンクリックでメールの購読を解除できる」 機能です。

よくある以下のような機能ではないので注意しましょう。

「メールにあるリンク先に遷移後、その画面で操作してメールの購読を解除できる」※このような機能ではないので注意!

実際にGmailでの例を見てみましょう。
以下はGmailに来たGoogleニュースの通知メールです。右上に「登録解除」というリンクがあります。

これを押下すると、以下の画面に遷移しメール購読の解除が完了した旨が表示されました。確かに「ワンクリックでメールの購読を解除」することができました。
※後述しますが、必ずしもこのGoogleの例のように「登録解除リンクを押下後にこういった画面に遷移する」必要はありません。この動作は一例とお考え下さい。

「Manage emails from Google」のリンクからメール管理画面に遷移すると、GoogleニュースのDaily briefingの購読が解除されていることがわかります。

対象のメールは?


ワンクリックによるメール購読解除の対象となるメールは以下の2種です。ソース

  1. マーケティング目的のメール

  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/


執筆者プロフィール:Kuriyama Akira
睡眠負債ゼロを必達します。

《このブロガーの記事》

お問合せはお気軽に

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:UnsplashSolen Feyissa