← RFC Reference

RFC 8058:电子邮件一键退订

Required by Gmail/Yahoo Mailing Lists & Header Fields Published March 2026
ELI5: RFC 2369 给电子邮件提供了一个取消订阅 URL,但点击它会打开一个网页,该网页可能要求确认、登录,甚至可能是网络钓鱼陷阱。RFC 8058 添加了一个新标头,它告诉电子邮件客户端"你可以通过向这个 URL 发送单个 HTTP POST 来取消订阅——不需要浏览器、不需要确认页面,就这么完成了。"

为什么存在这个功能

RFC 2369 的 List-Unsubscribe 标头存在根本问题:电子邮件客户端无法安全地自动处理该 URL。HTTPS URL 可能导向带有验证码、登录表单、确认步骤甚至恶意网站的页面。客户端必须打开浏览器让用户处理——增加了阻力,阻止了使用。

RFC 8058 通过引入 List-Unsubscribe-Post 标头来解决此问题。当与 HTTPS List-Unsubscribe URL 一起出现时,它表示电子邮件客户端可以直接向其发送 HTTP POST 请求以取消订阅用户——无需浏览器、无需确认、一键完成。

自 2024 年 2 月以来,Gmail 和 Yahoo 要求大批量发件人(每天向其用户发送超过 5000 条消息的人)符合 RFC 8058。这对商业电子邮件不再是可选的。

工作原理

该机制需要两个标头协同工作:

必需标头

List-Unsubscribe: <https://example.com/unsub?id=abc123>,
    <mailto:unsub-abc123@example.com>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

当电子邮件客户端看到两个标头时:

  1. 它在 UI 中显示突出的"取消订阅"按钮。
  2. 当用户点击它时,客户端向 List-Unsubscribe 中的 HTTPS URL 发送 HTTP POST。
  3. POST 主体恰好是:List-Unsubscribe=One-Click
  4. 发件人的服务器处理 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 响应表示成功。响应正文不会显示给用户,因此可以为空或包含简单确认。

关键技术细节

标头要求

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

常见错误

可交付性影响

Related RFCs