RFC 8058: メールのワンクリック購読解除
これが存在する理由
RFC 2369のList-Unsubscribeヘッダーには根本的な問題がありました。メールクライアントはURLに安全に自動的に作用することができませんでした。HTTPSのURLはCAPTCHA、ログインフォーム、確認ステップ、または悪質なサイトにつながる可能性がありました。クライアントはブラウザを開いてユーザーに処理させる必要がありました。これは使用を阻止する摩擦を加えました。
RFC 8058はList-Unsubscribe-Postヘッダーを導入することでこれを解決します。HTTPS List-Unsubscribe URLと一緒に存在する場合、メールクライアントがHTTP POSTリクエストを直接送信してユーザーの登録を解除できることを示します。ブラウザなし、確認なし、ワンクリック。
2024年2月以降、GmailとYahooは大量送信者(1日5,000件以上のメッセージをユーザーに送信する者)にRFC 8058準拠を要求しています。これはもはやコマーシャルメールではオプションではありません。
仕組み
このメカニズムには一緒に機能する2つのヘッダーが必要です。
必須ヘッダー
List-Unsubscribe: <https://example.com/unsub?id=abc123>, <mailto:unsub-abc123@example.com> List-Unsubscribe-Post: List-Unsubscribe=One-Click
メールクライアントが両方のヘッダーを認識すると:
- UIに目立つ「登録解除」ボタンを表示します。
- ユーザーがそれをクリックすると、クライアントは
List-UnsubscribeからのHTTPS URLにHTTP POSTを送信します。 - POSTボディはちょうど:
List-Unsubscribe=One-Click - 送信者のサーバーはPOSTを処理し、ユーザーの登録を解除します。
HTTP POSTリクエスト
POST /unsub?id=abc123 HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 26 List-Unsubscribe=One-Click
サーバーレスポンス
サーバーは200 OKステータスを返して、登録解除が成功したことを確認する必要があります。すべての2xxレスポンスは成功を示します。レスポンスボディはユーザーに表示されないため、空またはシンプルな確認を含むことができます。
重要な技術的詳細
ヘッダー要件
List-Unsubscribe-Postヘッダー値はちょうどList-Unsubscribe=One-Clickである必要があります。バリエーションはありません。List-Unsubscribeヘッダーは少なくとも1つのHTTPS URL(HTTPではない)を含む必要があります。mailto URIはオプションですが、フォールバックとして推奨されます。- 両方のヘッダーは同じメッセージに存在する必要があります。
List-Unsubscribe-PostがList-Unsubscribeなしは無意味です。
DKIM要件
メッセージはDKIM認証を通過する必要があり、DKIM署名はList-UnsubscribeとList-Unsubscribe-Postヘッダーの両方をカバーする必要があります。これは攻撃者がトランジット中に登録解除URLを注入または変更することを防止します。Gmailはこれを明示的にチェックします。
エンドポイント実装
; 最小限のサーバー側ハンドラ(疑似コード) function handleUnsubscribe(request): if request.method != "POST": return 405 Method Not Allowed if request.body != "List-Unsubscribe=One-Click": return 400 Bad Request subscriberId = request.queryParams["id"] suppressRecipient(subscriberId) return 200 OK
完全なメッセージヘッダー例
From: newsletter@example.com To: user@gmail.com Subject: Your Weekly Update MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=sel1; h=from:to:subject:list-unsubscribe:list-unsubscribe-post; b=... List-Unsubscribe: <https://example.com/unsub?id=abc123>, <mailto:unsub-abc123@example.com> List-Unsubscribe-Post: List-Unsubscribe=One-Click Content-Type: text/html; charset=utf-8
一般的な間違い
-
HTTPSの代わりにHTTPを使用。
List-UnsubscribeのURLはHTTPSを使用する必要があります。メールクライアントは平文HTTPエンドポイントにPOSTリクエストを送信しません。 - POSTの後に確認を要求。 ワンクリックのポイントはワンクリックです。POST単独は登録解除を完了する必要があります。ユーザーに「クリックして確認」を求める確認メールを送信しないでください。これは目的を無効にします。
-
DKIM署名でヘッダーをカバーしていない。 DKIM署名が
list-unsubscribeとlist-unsubscribe-postをh=タグに含めていない場合、Gmailはヘッダーを信頼せず、ワンクリックボタンを表示しません。 - エラーまたはリダイレクトを返す。 エンドポイントは2xxステータスコードを返す必要があります。301/302リダイレクト、403禁止、または500エラーを返すと、登録解除に失敗し、ユーザーがスパムとして報告するトリガーになる可能性があります。
- URL有効期限切れ。 一部の送信者は短い有効期限を持つ署名付きURLを使用しています。ユーザーが「登録解除」をクリックする前にURLが有効期限切れになった場合(メッセージを受け取ってから数週間である可能性があります)、登録解除は失敗します。長期間有効または有効期限なしトークンを使用してください。
- GETベースの登録解除。 エンドポイントはGETではなくPOSTを処理する必要があります。GETベースの登録解除URLはメールリンクスキャナー、プレビューボット、またはセキュリティツールによってトリガーされることがあります。これはクリックしなかったユーザーの登録を解除します。
-
mailttoフォールバックを省略。 HTTPSのURLはワンクリックを処理しますが、
mailto:URIはRFC 8058をサポートしないメールクライアント用のフォールバックを提供します。両方を含めてください。
配信可能性への影響
- Gmail/Yahooの義務。 大量送信者(1日5,000件以上のメッセージ)はRFC 8058を実装する必要があります。非準拠はスパムフィルタリングの増加と潜在的な拒否につながります。これは最近導入された最も影響力のある配信可能性要件です。
- スパム苦情の削減。 ワンクリック登録解除は「スパムを報告」への摩擦なし代替を提供します。簡単にオプトアウトできるユーザーは苦情を申し立てる必要がなく、苦情率を直接低下させます。
- 肯定的な評判信号。 適切に実装されたワンクリック登録解除は、メールボックスプロバイダーに対してあなたがユーザー設定を尊重する責任ある送信者であることを示しています。これは肯定的な送信者評判に貢献します。
- ユーザーエクスペリエンス。 受信者はGmail、Yahoo Mail、Apple Mailに明確で目立つ「登録解除」リンクを表示します。これは信頼を構築します。ユーザーは簡単に停止できることを知っているときにメールに関与する可能性が高くなります。
- 処理速度が重要。 GmailはそれをテストしてPOSTエンドポイントが実際に機能することを確認する可能性があります。エンドポイントが遅いか信頼できない場合、ワンクリックボタンが表示されない可能性があります。レスポンス時間を1秒未満に保ってください。