我需要知道电子邮件中(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
您必须在文档中跳转一下才能找到每种标记类型的定义,但它们都在那里。
获得定义后,您所需要做的就是扫描名称字符串并查看它是否仅包含有效字符。
根据定义,一个display-name
是一个短语
,一个短语
是1个或多个单词
标记(或者一个 obs-word
,为了让解释更简单,我现在将忽略它)。
word
标记可以是 atom
或 quoted-string
。
在您的示例中,John Q. Public
包含一个特殊
字符,"."
,它不能出现在原子内
token 。 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
基于此,我们可以知道带引号的字符串中允许使用 "."
,因此...您的 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>
其中任何一个都可以。
关于smtp - 标题中显示名称的验证/格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24940588/