【问题标题】:Validation/Format of display-name in from header标题中显示名称的验证/格式
【发布时间】:2014-09-16 09:56:47
【问题描述】:

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

像这样:

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

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

我咨询了RFC 2822并没有找到关于显示名的具体格式

【问题讨论】:

  • 您是否有机会投票并接受我的回答?谢谢。
  • @jstedfast - 我接受了你的回答,非常感谢你的关注。对我帮助很大。
  • 谢谢,不客气!

标签: smtp rfc rfc2822


【解决方案1】:

这都是在您在问题中链接到的 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,我现在将忽略它以使解释更简单)。

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>

其中任何一个都可以。

【讨论】:

  • 这是一个绝妙的答案。感谢您花时间将其编译成一个简洁的定义!
猜你喜欢
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 2020-11-11
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多