smtp - 标题中显示名称的验证/格式

标签 smtp rfc rfc2822

我需要知道电子邮件中(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 标记可以是 atomquoted-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/

相关文章:

smtp - 配置 SilverStripe 3.x 以使用外部 SMTP 邮件服务器

java - smtp 和 pop3 如何与 localhost 一起使用

php - 电子邮件标题中的特殊字符是什么以及何时使用引号?

javascript - 哪些日期格式是符合 IETF 标准的 RFC 2822 时间戳?

python : Sending html format email through SMTP

c# - Web 链接的 C# 解析器 (RFC 5988)

url - URL中可以使用哪些字符?

php - HTTP header 中使用的日期/时间格式

php - 通过验证但被退回的电子邮件地址是否有效?

c++ - 无法连接到 SMTP 服务器