13

我需要知道name-addr电子邮件中来自()字段的验证/格式规则是什么。在 rfc 中解释name-addrdisplay-name.

像这样:

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

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

我查阅了RFC 2822并没有找到关于显示名称的具体格式

4

1 回答 1

30

这一切都在您在问题中链接到的 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字符。令牌呢?走着瞧..."."atomquoted-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>

其中任何一个都可以。

于 2014-07-25T14:37:02.430 回答