邮件地址中的 + 号(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.com、zhangsan+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
