来自标题的display-name的验证/格式

时间:2014-07-24 17:47:19

标签: smtp rfc rfc2822

我需要知道电子邮件中(name-addr)字段的验证/格式规则是什么。 在rfc中解释了name-addr的格式,但详细介绍了display-name

像这样:

From: John Q. Public <JQP@bar.com>

我想知道允许的字符和长度。 我怎么知道John Q. Public有有效字符? 我应该只允许打印的US-ASCII字符吗?

我咨询了RFC 2822,但没有找到显示名称的具体格式

1 个答案:

答案 0 :(得分:19)

这是在您在问题中链接的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-namephrasephrase是1或更多word令牌(或obs-word我是& #39; ll暂时忽略这个解释更简单。)

word令牌可以是atomquoted-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

基于此,我们可以告诉您在引用字符串中允许".",因此...... 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>

其中任何一个都可以。