gmailのunsubscribeボタンからメルマガ配信停止ができる仕組み
はじめに
こんにちは、Tetsu です。企業から配信されるメルマガを読んでいるときに「購読停止」や「Unsubscribe」というボタンがメールクライアントの UI として存在していることに気づいたことはありませんか?私はあるとき、「なぜ Gmail の共通の UI から異なるメルマガの配信停止ができるんだろう?」と疑問に思いました。
そこでサークルの後輩に教えてもらったところ、メールヘッダに秘密があることを知りました。調べてみると、共通規格やその背景がとても面白かったので、記事としてまとめることにしました。
この記事の目的
この記事を読み終わったとき、メールクライアントからなぜ各メール配信の停止ができるかの仕組みを読者の皆さんが知人に説明できるようになることを目指します。
メルマガ配信の仕組みと現状
近ごろ、企業から配信されるメルマガって結構多いですよね。EC サイトからのセール情報やニュースレター、サービスの更新情報など、毎日何通ものメールが届きます。

企業はメール配信用サービス(SendGrid、Mailchimp、Amazon SES など)を使って私たちにメルマガを配信しています。正直、企業から届くメールって宣伝ばかりだし読むのが面倒でどんどん溜まってしまいますよね。多くのメルマガには、メールの最後に配信停止の案内があり、配信停止画面へ遷移するためのリンクが設置されてます。

購読停止画面の中にある停止ボタンを押すと購読停止 API が実行されて配信リストから削除されるようになっています。多くの場合は 1. メールの購読停止リンクをクリックする、2. URL から購読停止画面に遷移する、3. 購読停止画面の停止ボタンを押すという面倒な手順が必要(後ほど説明)ですが、メールクライアントからワンクリックで購読停止可能な場合もあります。
結論:メールクライアントから unsubscribe できる仕組み
結論から言うと、メルマガで送信されるメールにはList-UnsubscribeとList-Unsubscribe-Postというヘッダが含まれています。この List-Unsubscribe ヘッダに配信停止用の URL やメールアドレスが記載されています。List-Unsubscribe-Post ヘッダにはList-Unsubscribe=OneClickという固定値が入っています。これらを Gmail や Outlook などのメールクライアントはこの情報を読み取って、共通のインターフェースからワンクリックで購読停止手続きを行えるようにしているのです。
List-Unsubscribe ヘッダ登場以前のメール購読停止
List-Unsubscribe ヘッダがないときには購読停止手続きが複雑化してしまうという問題がありました。これはメールクライアントによる購読停止 API 誤爆の対策が原因でした。
購読停止 API 誤爆
メールのヘッダではなく本文に配信停止 URL を含める場合、メールクライアントの種類によっては本文内のエンドポイントを自動的に fetch してしまうものがあります。これによってユーザの意図にかかわらず購読停止 API が実行されてしまいます。
そうなるとメール配信側の企業は購読停止 API がユーザの意思で実行されたのか、メールクライアントの誤爆で実行されたのか判断できませんし勝手に停止されるのは困ります。それを防ぐにはエンドポイントを fetch しただけでは購読停止処理が実行されないように2段階以上のステップを設定する必要が生じます。このようにして購読停止処理は複雑化してしまいました。これはユーザにとって非常に面倒ですよね。
しかもユーザが面倒に感じて一度迷惑メールフォルダ行きに設定してしまうと、配信停止 URL を踏んでもらうことすらできません。すると企業としても無駄なメールを送り続けることになります。
List-Unsubscribe ヘッダがある場合のメール購読停止
List-Unsubscribe ヘッダがある場合、購読停止 URL はメール本文内には無くヘッダの中に書かれています。そのためメールクライアントが勝手に fetch して購読停止 API が実行されることはありません。
さらに、このヘッダに対応しているメールクライアント(Gmail など)はこのヘッダが存在するときに「購読停止ボタン」を表示してくれます。そしてボタンクリック時には購読停止 API の実行ないしは購読停止メールを送信してくれます。これによってユーザは単一のインターフェースからワンクリックで簡単に購読停止処理を行うことができます。

これはユーザだけでなくメールを配信する企業にとっても嬉しいことです。購読停止手続きが分かりづらい場合、迷惑メールとして報告されてしまう可能性があります。それを防ぐことで送信者の信頼度が低下してメールが迷惑メールフォルダに振り分けられてしまい届きにくくなってしまう事態を防ぐことができます。また欲しい人だけにメールを届けて、不要な人には購読停止もらうことができるのでメールによるマーケティング効果が上がります。
List-Unsubscribe ヘッダの中身ってどんなかんじ?
最後に、List-Unsubscribe ヘッダの中身に実際にどんな情報が記載されているかをサンプルで紹介します。この例では URL に購読停止 API のエンドポイントが入っていて、末尾のパスパラメータからユーザを一意に特定してユーザの購読を停止します。
# ユーザーを一意に特定するためのIDが末尾のパスパラメータに入っている
List-Unsubscribe: <https://example.com/unsubscribe/abcdefg>
# ワンクリック購読停止を有効にする固定値
List-Unsubscribe-Post: List-Unsubscribe=OneClick
他にも URL にクエリパラメータとして jwt トークンを入れる場合もあります。
# jwtをデコードするとIDを取り出せる。
List-Unsubscribe: <https://example.com/unsubscribe?jwt=abcdefg>
ちなみにList-Unsubscribe-Postをつけない場合はワンクリックで購読停止ができないそうです。
まとめ
今回はメールクライアントの共通の UI からメルマガをワンクリックで解除できる仕組みを紹介しました。標準規格のおかげで企業と一般ユーザの両方が win-win になってるのが素晴らしいですよね。