电子邮件用了N年了,也知道邮件地址的格式就是“用户名@域名”的格式,但是还没真正研究过什么是一个合法的邮件地址,为此特别查了一下相关的协议。
邮件地址用于Internet上的邮件传输,在RFC5321和RFC5322
中定义。实际上这两个RFC上修订后版本了,最初的版本是RFC821和RFC822。
一个邮件地址,例如jsmith@gmail.com,由两部分组成。“@”前面的称为local-part,一般就是收件人的用户名,“@”之后为domain name,邮件系统就是通过域名来发送邮件。local part最大长度为64个字符,domain name最大长度为253个字符,而整个邮件地址长度不能超过254个字符。实际上,协议
中定义是最长256个字符,但是因为邮件地址在用于接收或回复地址时,还会在前后加上"<>",所以只能是254了。
域名的定义就不多说了,主要是对local part部分进行说明。
local part由以下字符组成:
另外,local part可以使用quoted-strings,也就是引号包括起来的字符串,例如"John Smith"@gmail.com。quoted-strings被认为是连续不可分隔的内容,其
中可以出现空格字符。但实际上这种方式通常没有使用,并且在RFC5321
中也警告最好不要使用这种方式,否则可能在发送和接收邮件时出现问题。
在RFC
中,local part是大小写区分的,但这个实际上要看邮件服务器的具体实现,有一些邮件服务器是不区分大小写的。甚至,有些邮件系统规定了只允许使用有限的
特殊字符(例如只允许使用"-"、"_"和"."),这些都是由具体的邮件系统实现来确定的。例如在gmail
中,local part
中允许出现".",但是服务器会自动忽略掉所有的"."字符,因此如果存在一个local part为your.username的帐号,那么your.user.name或者yourusername这样的帐号都不会允许被创建。
RFC也试图对邮件地址进行国际化,例如“张三@浙商银行”这样的形式,但是,实际情况是不允许使用这样的邮件
地址的,现有的邮件服务器不会处理这样的地址。
本文转自 拾瓦兴阁 51CTO博客,原文链接:http://blog.51cto.com/ponyjia/1129833