我在处理电子邮件的服务器上工作,作为其中的一部分,我们做了一些MIME解析/编码。我最近遇到了一个有效的消息问题,但在MIME标头中包含一个Latin-1字符。有人向包含Latin-1字符的多个收件人输入了一个电子邮件地址,因此SMTP信封仅包含有效收件人,但收件人行仍包含无效地址和不正确编码的字符串。
我的印象是这是非法的,并且MIME标头必须是7位。 MIME标头中的8位值必须以
的形式进行编码=?charset?encoding?encoded text?=
有问题的标题是这样的:
To: <changéd@someplace.com>, <secondaddress@someplace.com>
我的问题是:这是有效的MIME而我只是不知道吗?
答案 0 :(得分:3)
来自RFC2822,互联网邮件格式,第2.2节,标题字段:
标题字段是由字段名称组成的行,后跟冒号 (“:”),后跟一个字段正文,并由CRLF终止。一个字段 名称必须由可打印的US-ASCII字符组成(即, 除了之外,其值为33到126之间的字符 结肠。字段主体可以由任何US-ASCII字符组成, CR和LF除外。但是,字段正文可能包含CRLF 用于标题“折叠”和“展开”,如章节中所述 2.2.3。所有的字体都必须符合中描述的语法 本标准的第3和第4节。
因此,任何非ASCII字符都是非法的。
答案 1 :(得分:1)
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