13

name-addr電子メールの from( ) フィールドの検証/フォーマットのルールを知る必要があります。RFC では の形式を説明しましname-addrたが、 について詳しく説明しdisplay-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トークンはatomまたは のいずれか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"."は引用符で囲まれた文字列内で許可されていることがわかります。そのため、... your の正しいフォーマット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 に答える