MIME标头中的二进制字符是否合法?

时间:2010-10-14 13:29:31

标签: character-encoding mime

我在处理电子邮件的服务器上工作,作为其中的一部分,我们做了一些MIME解析/编码。我最近遇到了一个有效的消息问题,但在MIME标头中包含一个Latin-1字符。有人向包含Latin-1字符的多个收件人输入了一个电子邮件地址,因此SMTP信封仅包含有效收件人,但收件人行仍包含无效地址和不正确编码的字符串。

我的印象是这是非法的,并且MIME标头必须是7位。 MIME标头中的8位值必须以

的形式进行编码
=?charset?encoding?encoded text?=

有问题的标题是这样的:

To: <changéd@someplace.com>, <secondaddress@someplace.com>

我的问题是:这是有效的MIME而我只是不知道吗?

3 个答案:

答案 0 :(得分:3)

来自RFC2822互联网邮件格式,第2.2节,标题字段

  

标题字段是由字段名称组成的行,后跟冒号      (“:”),后跟一个字段正文,并由CRLF终止。一个字段      名称必须由可打印的US-ASCII字符组成(即,      除了之外,其值为33到126之间的字符      结肠。字段主体可以由任何US-ASCII字符组成,      CR和LF除外。但是,字段正文可能包含CRLF      用于标题“折叠”和“展开”,如章节中所述      2.2.3。所有的字体都必须符合中描述的语法      本标准的第3和第4节。

因此,任何非ASCII字符都是非法的。

答案 1 :(得分:1)

RFC 822 says

 address     =  mailbox                      ; one addressee
 mailbox     =  addr-spec                    ; simple address
 addr-spec   =  local-part "@" domain        ; global address
 local-part  =  word *("." word)             ; uninterpreted
 word        =  atom / quoted-string     
 atom        =  1*<any CHAR except specials, SPACE and CTLs>
 CHAR        =  <any ASCII character>        ; (  0-177,  0.-127.)
得到了吗?您的选项是“quoted-string” - =?charset?encoding?encoded text?=

答案 2 :(得分:0)

电子邮件地址,如

changéd@someplace.com

完全合法如果字符以UTF-8编码, ,如果服务器支持SMTPUTF8(SMTP的扩展名)。服务器通过使用SMTPUTF8关键字响应EHLO来通告支持:

250-SMTPUTF8

客户端通过在MAIL命令上添加SMTPUTF8参数来使用扩展名:

MAIL FROM:<changéd@someplace.com> SMTPUTF8

可悲的是,此时此扩展的支持很少。

有关详细信息,请参阅RFC 6531:http://tools.ietf.org/html/rfc6531