一个有效的电子邮件地址的最大长度是多少?

1209

一个有效电子邮件地址的最大长度是多少?它是否由任何标准定义?


什么类型的电子邮件地址?互联网、X.400还是其他? - Toby Speight
2
请注意,您的应用程序应该强制实施的电子邮件地址长度限制可能与理论最大值不同(理论最大值比这个注释还要长)。其他答案讨论了这个问题,例如:https://dev59.com/1XM_5IYBdhLWcg3wn0rT - MGOwen
我试图创建一个245个字符(减去@gmail.com的10个字符)的gmail地址,但gmail告诉我:“抱歉,您的用户名必须在6到30个字符之间。” - jumping_monkey
另一个重要的信息需要考虑的是,无论是严格查看电子邮件地址部分(user@domain),还是以From:Sender:Reply-To:To:Cc:头部格式化的电子邮件地址。 - Thomas Guyot-Sionnest
根据一些安全研究人员的说法,较长的电子邮件地址更有可能被垃圾邮件发送者使用。我现在找不到参考资料了,但我记得在过去几个月中看到过这样的说法。像SpamAssassin这样的垃圾邮件过滤系统已经提供了这种测试,你可以应用HEAD_LONG规则。我已经使用这个功能多年了……我妻子收到大量垃圾邮件,所以当我们还在使用Gmail时,我不得不在其前面加上这个功能,因为他们开始限制我们的邮件。(我们后来转向了付费的ProtonMail,它更好!) - Mark McWiggins
8个回答

1447
电子邮件地址不得超过254个字符。
这一规定在提交勘误后被IETF接受。可以在线获得任何给定地址的完整诊断。RFC 3696的原始版本将最大长度描述为320,但John Klensin随后接受了一个错误的值,因为路径被定义为……
Path = "<" [ A-d-l ":" ] Mailbox ">"

所以Mailbox元素(即电子邮件地址)有尖括号形成路径,该路径的最大长度为254个字符,以将路径长度限制为256个字符或更少。 RFC 5321中指定的最大长度如下:
引用:

反向路径或正向路径的最大总长度为256个字符。

RFC 3696已在此处进行了更正。
人们应特别注意RFC 3696的勘误表。其中三个规范示例实际上是无效的地址。
我已整理了几百个测试地址,您可以在http://www.dominicsayers.com/isemail找到。

13
新的 RFC 标准允许在电子邮件地址中使用 Unicode,你对此有何看法? - Pacerier
4
在@符号之前和之后各有多少个字符是有关系的吗?或者这并不重要? - Geoffrey
9
@Lodewijk:RFC 3696不是一个标准,它只是试图帮助人们正确解释基础标准。不幸的是,在他澄清情况时,Klensin包含了一些严重的错误,这些错误已在勘误表中得到了纠正。但是很讽刺的是,由于没有人阅读勘误表,RFC 3693最终变得毫无用处。 - Dominic Sayers
5
使用国际化电子邮件地址时,将限制定义为254“八位组”而不是字符更为准确,但我不确定。RFC 6531扩展了RFC 5321的正向/反向路径以允许使用UTF-8字符,但RFC 5321明确规定限制为“256个八位组”,包括分隔符(这是与RFC 2821的区别,后者说“字符”)。我认为256个八位组的限制(减去254的2个)没有被取代,并且对于带有多字节UTF-8字符的地址,有效的“字符”限制会减少。 - Andre D
2
我遇到了与@AndreD相同的问题,并且我同意他的观点。另一方面,dominicsayers.com/isemail仍然说它是254个字符。有人知道更多吗?我认为它是八位字节而不是字符,但这意味着理论上最大字符数可能为63。我无法相信新的RFC 6531没有解决这个问题,所以我不确定。 - Binarus
显示剩余10条评论

70

13
这是一篇有关电子邮件的可爱文章,澄清了各种谬误,包括“最大长度==320”的说法。实际上限制是254。 - Carl
79
可爱的文章在哪里? - Bob
5
这个答案是正确的。这个电子邮件地址是有效的,但绝对不能使用,因为2821规定MAIL/RCPT命令使用带有“<>”括号的256字符... - vp_arth
1
这是否包括格式为user+inbox@domain的电子邮件? - Aaron Esau
3
这个答案缺少参考文献。它可能来自RFC3696,但是标准的这部分已经在勘误中修订,包括总字符限制为254个字符。有关详细信息和勘误链接,请参阅已接受的答案。 - Matthijs Kooijman
显示剩余3条评论

35

用户

用户名的最大总长度为64个字符。

域名

在“@”后面的域部分的最大长度为255个字符。

然而,在RFC 2821中有一项限制:

反向路径或正向路径的最大总长度为256个字符,包括标点符号和元素分隔符。因为不适合这些字段的地址通常是没有用处的,所以电子邮件地址的上限应该通常被认为是256个字符,但是路径的定义是:Path = “<” [ A-d-l “:” ] Mailbox “>”,正向路径将至少包含一对尖括号,除了Mailbox之外,这将限制电子邮件地址为254个字符。


11
很酷,1982年的古老rfc......现在有rfc5321用于SMTP。 - vp_arth
这里是RFC5321的直接链接,其中定义了限制(请注意,它是以字节/八位组为单位而不是“字符” - 请参阅Unicode和电子邮件)。+1 - Eric Mutta

26
为帮助像我这样困惑的新手,答案是“有效电子邮件地址的最大长度为254个字符”。如果您的应用使用电子邮件,请将字段设置为接受254个字符或更少,并准备好开始。您可以在此处对电子邮件进行一系列测试,以查看其是否有效:http://isemail.info/。RFC(请求评论)是互联网工程任务组(IETF)发布的一种出版物类型,它将254个字符定义为极限。位于此处-https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3

你在哪里看到“254个字符”?我在你提供的链接中看到,“反向路径或正向路径的最大总长度为256。”在“254”的Ctrl+F中没有找到任何内容。 - HoldOffHunger
@HoldOffHunger 在这里:https://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690然而,在RFC 2821中对MAIL和RCPT命令中地址长度有254个字符的限制。由于不适合这些字段的地址通常是无用的,因此应将地址长度的上限通常视为254个字符。 - Michael Große
@MichaelGroße 谢谢!实际上这些信息在我的答案中已经列出(事实上,我列出了3696号),由于没有得到回应,最终还是回答了,但感谢您确认了我的猜测。 - HoldOffHunger

25
根据以下文章:https://www.rfc-editor.org/rfc/rfc3696(第6页,第3节),提到:

"电子邮件地址有长度限制。在“@”符号之前的本地部分最多可达64个字符(八位字节),在“@”符号之后的域名部分最多可达255个字符(八位字节),总长度最多为320个字符(八位字节)。处理电子邮件的系统应准备好处理长达320个字符的电子邮件地址,即使它们很少出现。"

因此,电子邮件地址的最大总长度为320个字符(“本地部分”:64 + “@”:1 + “域名部分”:255,总和为320)。

请问能否提供一下在 JavaScript 中用于验证 320 个字符长度的电子邮件地址的正则表达式?先行致谢。 - Kamlesh
6
这个标准的这部分已经在勘误表中被修改,增加了总字符限制为254个。有关详细信息和勘误表链接,请参阅已接受的答案。 - Matthijs Kooijman
实际上在第4页,第3节(电子邮件地址的限制)。 https://tools.ietf.org/html/rfc3696#section-3 - NeoH4x0r

22

其他回答有些让人摸不着头脑。 简单的回答:我们在电子邮件中可以控制的字符总数为254个。 其中,256个是用于整个电子邮件地址,包括开头的隐含"<"和结尾的">"。因此,我们还剩下254个可供使用。


7

简短回答

假设有一个像这样的电子邮件地址...

me@example.com

长度限制如下:
- 整个电子邮件地址(又称“路径”):即 me@example.com,最多256个字符。 - 本地部分:即 me,最多64个字符。 - 域名:即 example.com,最多254个字符。
RFC标准不断发展变化,但如果您想得到一个2009年IETF的源代码,请看以下一行话:“......地址长度的上限通常应视为256。”(出自:RFC3696
SMTP最初在1982年8月发布的RFC821中定义了路径是什么,这是一个官方的互联网标准(大多数RFC只是提案)。引用它的话:“......反向路径指定邮件来自哪里。正向路径指定邮件去哪里。”
2001年4月发布的RFC2821是过时标准,它规定了我们现在的本地部分、域和路径的最大值。2008年10月发布的新草案标准RFC5321保持了相同的限制。在这两个日期之间,2004年2月发布了RFC3696。它错误地将最大电子邮件地址限制定为320个字符,但该文档仅是“信息性的”,并声明:“这份备忘录为互联网社区提供信息。它不指定任何类型的互联网标准。”因此我们可以忽略它。
引用现代已确认的标准RFC2821,即RFC5321的话:"......路径长度上限通常被认为是256。"

4.5.3.1.1. 本地部分

用户名称或其他本地部分的最大长度为64个字符。

4.5.3.1.2. 域名

域名或数字的最大总长度为255个字符。

4.5.3.1.3. 路径

反向路径或正向路径的最大总长度为256个字符(包括标点和元素分隔符)。

您会注意到我指出了域名的最大长度为254,而RFC指出了域名的最大长度为255。这只是简单的算术问题。一个255个字符的域名加上“@”符号是256个字符的路径,这是最大的路径长度。不过,空名称是无效的,所以域名实际上最大长度为254。


0
遗憾的是,所有其他答案都是错误的。它们中的大多数引用了RFC 2821或更新版本,该版本甚至没有定义电子邮件地址。它所做的是定义路径。电子邮件地址由RFC 2822(或更新版本)定义,可以更长。一些有效但不是有效路径的示例地址包括:
(Firstname Lastname) user@domain
Firstname Lastname <user@domain>

这两个是不同方式书写的相同邮箱。因此,如果您的目标是在数据库中存储电子邮件地址,则 254、256 或 320 个八位字节的限制可能太低了,尽管实际上,这很少会成为问题。


2822并没有定义“电子邮件地址”。字符串“邮件地址”只出现了一次,并且是在一个无关的上下文中。它有一个“地址规范”,即一个邮箱或者一个邮箱组。显然,一个邮箱组不是一个“电子邮件地址”。正如其他人所说的那样,“电子邮件地址”肯定是你发送给SMTP服务器以传递电子邮件的内容(正向路径),或者是故障报告的目标地址(反向路径)。 - EML
@EML 这个答案绝对有效,RFC2822 很好地定义了电子邮件地址,在 section 3.4. Address Specification 中可以查看到addressname-addrangle-addraddr-spec - Thomas Guyot-Sionnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接