RFC 5322邮件显示名中编码词内未转义特殊字符是否合法?
邮件地址合法性与RFC验证时机解答
核心结论
- 你提到的
=?UTF-8?B?Zm9vOmJhcg==?= <user@example.com>这个地址不符合RFC5322规范,工具拒绝它属于合规行为,并非Bug。 - RFC5322的格式验证必须在RFC2047解码完成后执行。
详细解释
关于RFC验证时机
RFC2047编码只是为了让含非ASCII字符或特殊符号的邮件头内容能在传输中安全传递,属于传输层的编码手段。解码后得到的才是实际要使用的内容,RFC5322对邮件地址的格式约束,针对的是解码后的真实内容,而非编码后的字符串。
关于带冒号的显示名规范
根据RFC5322,邮件地址的显示名属于phrase类型:
- 如果
phrase中包含冒号、逗号、双引号这类特殊字符,必须将整个显示名包裹在双引号中,形成quoted-string(比如"foo:bar" <user@example.com>); - 若不使用引号,
phrase只能由普通字母、数字和部分无歧义符号组成,冒号这类特殊字符不允许直接出现在未加引号的phrase里。
你提供的编码示例解码后得到的显示名是foo:bar,未加引号,这直接违反了RFC5322对phrase的格式要求,因此这个地址不合法。
内容的提问来源于stack exchange,提问作者Moby Duck
相关产品推荐
相关产品推荐

