【发布时间】:2015-07-31 05:49:25
【问题描述】:
电子邮件地址不仅包含以下部分:
localpart@domain.tld
下一行的完整字符串(包括引号之间的部分、引号本身和尖括号)也是有效地址:
“John Doe”
当我用我自己的名字替换“John Doe”时,我会得到一个地址,我可以输入我的电子邮件客户端而不会收到任何投诉(注意 »ö« 在我的姓氏是非 ASCII 字符):
“Hubert Schölnast”
看来(对于 Thunderbird 等标准电子邮件客户端的用户而言),引用部分中的特殊字符似乎是可以的。
但是当我使用 cpan-module Email::Valid 在 perl 脚本中检查这个完整的电子邮件地址时,我收到一个错误,说这个地址不符合 rfc822 的规则,并且该模块的文档说,rfc822 不允许在电子邮件地址的任何部分中使用任何非 ascii 字符。 (当我省略字母 ö 或将其替换为 ascii 字母时,支票表明地址有效。)
显然,任何电子邮件客户端在向 smtp 服务器发送电子邮件之前都必须对电子邮件地址进行编码,并且在收到新电子邮件时必须对其进行解码并将标题信息显示给用户。但我不知道这是怎么做到的,而且我确实在谷歌上尽了最大努力。
我需要这种编码算法,因为我想编写一个 perl 脚本,它接受任何有效的电子邮件地址(在引用部分中也包含特殊字符),然后将电子邮件发送到这些地址。
【问题讨论】:
-
顺便说一句,您的真实姓名不需要双引号,看起来就像您将其放在引号中,因为它不是您的“真实”姓名。 (要么这样,要么你使用的是 Microsoft 的电子邮件软件。无论哪种方式,都很尴尬。)
-
@tripleee:嗯,这是我的真名(查看我的个人资料)。但是,当名称包含特殊字符时,某些电子邮件客户端(不确定是哪一个)需要引号。
-
当您对它进行 RFC2047 编码时,该值不再包含任何特殊字符。
标签: perl email encoding special-characters