邮件地址中的 + 号(Plus Addressing/Tagging)是什么原理?

为什么有些邮箱地址包含 + 号(如 user+tag@domain.com)?所有邮件服务器都支持吗?

Plus addressing(又称 Subaddressing 或 Tagged Addressing)是一种在标准邮箱地址的本地部分(local-part)中使用加号(+)附加标签的机制,允许用户使用同一邮箱生成多个变体地址。其技术基础定义于 RFC 5233 —— Sieve Email Filtering: Subaddress Extension。

工作原理

标准邮件地址格式由 RFC 5321 定义,本地部分和域名部分由 @ 分隔。Plus addressing 在本地部分中插入 + 作为分隔符:user+tag@domain.com。邮件投递时,MDA 将 + 之后的部分视为标签(subaddress),实际投递至 user 对应的主邮箱。标签信息仍保留在信封收件人地址中,可用于服务器端的 Sieve 过滤规则(RFC 5233)或客户端侧的分类处理。

典型使用场景

  • 注册不同网站时使用不同标签——如 zhangsan+amazon@domain.comzhangsan+github@domain.com,便于追踪哪一方的邮件地址被泄露;
  • 结合 Sieve 筛规则,自动将特定标签的邮件归入指定文件夹:
require ["subaddress", "fileinto"];
if address :subaddress "to" "amazon" {
    fileinto "INBOX.Shopping";
}

邮件服务器支持情况

  • Gmail:原生支持,user+tag@gmail.com 投递至 user@gmail.com,且 . 也被忽略(非 RFC 标准);
  • Outlook.com:支持别名而非 + 号方式;
  • Dovecot:默认支持,但需启用 recipient_delimiter 配置:
recipient_delimiter = +
  • Postfix:通过 recipient_delimiter 参数控制,默认值为空(不启用)。在 main.cf 中设置为 + 即可启用。

安全注意事项

虽然 + 号变体地址非常实用,但需注意:

  • 如果攻击者知道你的邮箱地址 user@domain.com,完全可以去除标签直接发送——因此它不能替代反垃圾邮件策略;
  • 某些垃圾信息发送者可能会尝试枚举 + 后面的标签来探测活跃邮箱;
  • RFC 5321 对本地部分的 + 没有特殊要求,将其作为标签分隔符是邮件系统实现层面的约定。

对于自建邮件系统,建议启用 recipient_delimiter = + 并配置相应的 Sieve 子地址过滤规则,为用户提供灵活的地址管理能力。

参考来源:RFC 5233 — Sieve Email Filtering: Subaddress Extension · RFC 5321 — SMTP