这些电子邮件标头是不是符合 RFC-2047 标准?
Posted
技术标签:
【中文标题】这些电子邮件标头是不是符合 RFC-2047 标准?【英文标题】:Are these email headers RFC-2047 compliant?这些电子邮件标头是否符合 RFC-2047 标准? 【发布时间】:2017-10-24 13:41:00 【问题描述】:我有几个客户使用我自己编写的邮件客户端。他们最近偶然发现附件文件名到达的电子邮件是乱码。
当我检查这些电子邮件时,我发现显然有一个本地网络邮件服务发送附件名称如下:
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;
name*="UTF-8''%D7%A2%D7%A8%D7%9B%D7%AA%20%D7%94%D7%A8%D7%A9%D7%9E%D7%94%20TCMP.docx"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename*=UTF-8''%D7%A2%D7%A8%D7%9B%D7%AA%20%D7%94%D7%A8%D7%A9%D7%9E%D7%94%20TCMP.docx
根据 RFC 2047,这是一个完全无效的 mime 标头。它没有带引号的可打印标识符 (?Q?),不同的字节用 % 而不是 = 编码,整个编码字应该以 =?并以 ?= 结尾,但事实并非如此。
当我将其修复为正确的格式时:
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;
name="=?UTF-8?Q?=D7=A2=D7=A8=D7=9B=D7=AA=20=D7=94=D7=A8=D7=A9=D7=9E=D7=94=20TCMP.docx?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=?UTF-8?Q?=D7=A2=D7=A8=D7=9B=D7=AA=20=D7=94=D7=A8=D7=A9=D7=9E=D7=94=20TCMP.docx?=
然后标题被正确解码。
如果我在这里遗漏了什么,谁能告诉我? RFC2047 是否有允许这些标头的新扩展,或者它们完全错误?
【问题讨论】:
该扩展格式在rfc2231中描述。 谢谢。看来我还是得执行这个标准。 【参考方案1】:正如@alex-k 所提到的,name*=
语法是在 RFC2231 中定义的,它是在 RFC2047 之后编写的。
但要回答按要求提出的问题,不。这两组标头都不符合 RFC2047。
在编写 RFC2047 时,*=
语法不存在,因此原始语法不符合。
第二组带有 MIME 编码的单词是无效的,因为它们违反了根据 RFC2047 的第 5 节允许 MIME 编码的单词的规则,特别是这两个规则:
+ An 'encoded-word' MUST NOT appear within a 'quoted-string'.
+ An 'encoded-word' MUST NOT be used in parameter of a MIME
Content-Type or Content-Disposition field, or in any structured
field body except within a 'comment' or 'phrase'.
(这些规则在 RFC 中不是连续的。)
【讨论】:
以上是关于这些电子邮件标头是不是符合 RFC-2047 标准?的主要内容,如果未能解决你的问题,请参考以下文章