给出一个电子邮件地址,格式如下
John Doe <[email protected]>
我想知道这种格式在哪里明确定义,以及整个格式叫什么。它似乎没有在 rfc5322(至少我没有找到)。那么,给定上面的地址,如果必须为其定义一个类,您会如何命名以下成员变量?
John Doe
(姓名)[email protected]>
(地址)John Doe <[email protected]>
-> 你怎么称呼整个事物?
答案1
约翰·多伊 <[电子邮件保护]> → 你怎么称呼整个事物?
它被称为邮箱,如 RFC 5322 第 45 页中所述:
3.4. 地址规范
地址出现在多个邮件头字段中,用于指示邮件的发件人和收件人。地址可以是单个邮箱,也可以是一组邮箱。
通常,邮箱由两部分组成:(1) 可选的显示名称,表示收件人(可以是个人或系统)的名称,可显示给邮件应用程序的用户;(2) 用尖括号(“<”和“>”)括起来的 addr-spec 地址。还有一种简单的邮箱形式,其中 addr-spec 地址单独出现,没有收件人的姓名或尖括号。Internet addr-spec 地址在第 3.4.1 节中描述。
也可以看看附录 A.1.2. 不同类型的邮箱
答案2
它位于RFC5322,你刚刚错过了:
address = mailbox / group
mailbox = name-addr / addr-spec
name-addr = [display-name] angle-addr
angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
group = display-name ":" [group-list] ";" [CFWS]
display-name = phrase
mailbox-list = (mailbox *("," mailbox)) / obs-mbox-list
address-list = (address *("," address)) / obs-addr-list
group-list = mailbox-list / CFWS / obs-group-list
让我们详细分析一下。
address
要么是 a 要么mailbox
是 a group
。Amailbox
是 aname-addr
要么是addr-spec
。
这name-addr
是你要问的格式:有一个可选的display-name
(它是可选的,因为它是用方括号定义的),后跟angle-addr
,它本身是一个addr-spec
尖括号,CFWS
两边都有可选的可折叠空间(在第 3.2.2 节) 或过时的地址格式obs-angle-addr
。
整个第 3.4.1 节专用于addr-spec
格式的描述。
因此,总结一下:
John Doe <[email protected]>
是name-addr
,它是 的变体mailbox
,它是 的变体address
。John Doe
是display-name
<[email protected]>
是一个angle-addr
[email protected]
是一个addr-spec
john
是local-part
example.com
是domain
。
答案3
请允许我发帖。我挖掘了一些关于“显示名称(见rfc5322)用点(.)括在引号中吗?”在之前的答案/评论中提到过。它看起来像:
第 3.2.3 节indeed 指出点不在
atext
集合中,但在集合中specials
。因此,根据该 RFC,带有点的显示名称必须用引号引起来。尽管如此!第 4 节和第 4.1 节讨论“只读”语法,并且允许在显示名称中使用点而不使用引号来读取和解析:
虽然这些句法形式一定不能按照第 3 节中的语法生成,但它们必须被符合要求的接收者接受和解析。... 它出现在这里是因为句点字符当前在地址的显示名称部分的许多消息中使用,尤其是姓名中的首字母,因此必须正确解释。
如此精彩。