我需要知道name-addr
电子邮件中来自()字段的验证/格式规则是什么。在 rfc 中解释name-addr
了display-name
.
像这样:
From: John Q. Public <JQP@bar.com>
我想知道允许的字符和长度。我怎么知道John Q. Public
有有效的字符?我应该只允许可打印的 US-ASCII 字符吗?
我查阅了RFC 2822并没有找到关于显示名称的具体格式
这一切都在您在问题中链接到的 rfc 中定义(顺便说一句,本文档的较新版本是RFC 5322):
display-name = phrase
phrase = 1*word / obs-phrase
word = atom / quoted-string
atom = [CFWS] 1*atext [CFWS]
atext = ALPHA / DIGIT / ; Any character except controls,
"!" / "#" / ; SP, and specials.
"$" / "%" / ; Used for atoms
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
specials = "(" / ")" / ; Special characters used in
"<" / ">" / ; other parts of the syntax
"[" / "]" /
":" / ";" /
"@" / "\" /
"," / "." /
DQUOTE
您必须在文档中翻阅一下才能找到每种令牌类型的定义,但它们都在那里。
一旦你有了定义,你需要做的就是扫描你的名字字符串,看看它是否只包含有效的字符。
根据定义,adisplay-name
是 aphrase
并且 aphrase
是 1 个或多个word
标记(或者obs-word
为了使解释更简单,我现在将忽略它)。
word
令牌可以是 anatom
或a quoted-string
。
在您的示例中,John Q. Public
包含不能出现在标记中的special
字符。令牌呢?走着瞧..."."
atom
quoted-string
quoted-string = [CFWS]
DQUOTE *([FWS] qcontent) [FWS] DQUOTE
[CFWS]
qcontent = qtext / quoted-pair
qtext = NO-WS-CTL / ; Non white space controls
%d33 / ; The rest of the US-ASCII
%d35-91 / ; characters not including "\"
%d93-126 ; or the quote character
基于此,我们可以判断 a"."
在带引号的字符串中是允许的,所以......您的正确格式display-name
可以是以下任何一种:
From: "John Q. Public" <JQB@bar.com>
或者
From: John "Q." Public <JQB@bar.com>
或者
From: "John Q." Public <JQB@bar.com>
或者
From: John "Q. Public" <JQB@bar.com>
其中任何一个都可以。