这些电子邮件标头是不是符合 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 标准?的主要内容,如果未能解决你的问题,请参考以下文章

使用编码字的 MIME 标头中的换行符是不是合法?

如何对 MIME 消息中 Content-Disposition 标头的文件名参数值进行编码?

什么是mime类型

MIME 消息中的电子邮件地址是不是有标准格式?

替换文本边界内的表达式

AWS SSH 密钥是不是符合 HIPAA 或 Sox 标准?