メールアドレスに使える文字

http://hxxk.jp/2004/10/10/1539

記事データ

投稿者

望月真琴

投稿日時

2004-10-10T15:39+09:00

タグ
概要

RFC2822 を元に、メールアドレスに使用できる文字を調べてみました。

リプライ

1 件のリプライがあります。

記事本文

以前同じようなことを調べた

思考/謎 - 2004年10月 - メールアドレスに使える文字を見て、そういえば以前同じようなことを調べたなあ……ということで、自分が読み返しやすいように掲載しておきます。

RFC 2822 - 3.4. Address Specification

Request for Comments: 2822 - Internet Message Format ( 和訳 ) を見ると、 3.4. Address Specification および、 3.4.1. Addr-spec specification という項があります。 そこからメールアドレスを構成する部分の記述を抜粋すると、次のようになります。

address         =       mailbox / group

mailbox         =       name-addr / addr-spec

addr-spec       =       local-part "@" domain

local-part      =       dot-atom / quoted-string / obs-local-part

domain          =       dot-atom / domain-literal / obs-domain

domain-literal  =       [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]

dcontent        =       dtext / quoted-pair

dtext           =       NO-WS-CTL /     ; Non white space controls

                        %d33-90 /       ; The rest of the US-ASCII
                        %d94-126        ;  characters not including "[",
                                        ;  "]", or "\"

私がこのサイトで使用しているメールアドレス "makoto@hxxk.jp" を例にとると、 local-part にあたる部分が "makoto" 、そして "@" が現れて、それに続く domain にあたる部分が "hxxk.jp" となっています。

RFC 2822 - 3.2.4. Atom

次に、 local-part や domain を構成している、 dot-atom について。

Several productions in structured header field bodies are simply strings of certain basic characters. Such productions are called atoms.

Some of the structured header field bodies also allow the period character (".", ASCII value 46) within runs of atext. An additional "dot-atom" token is defined for those purposes.

和訳の方の同じ項を見ると、

構造化されたヘッダフィールドボディのいくつかの産物は、単にある基本的な文字列である。 そのようなものをatomと呼ぶ。

いくつかの構造化されたヘッダフィールドボディはまた、一連のatext中ピリオド(".", アスキーコード46)が許可されている。 追加の「dot-atom」トークンがその目的で定義される。

とあります。

これを逆の視点で見ると、 dot-atom トークンが定義されているヘッダフィールドボディでは、 atext の中に "." ( . ) を記述することが許可されているということだと私は捉えました。 そして今の引用部分のすぐ下を見ると、 atext についての説明が書いてありました。

atext           =       ALPHA / DIGIT / ; Any character except controls,
                        "!" / "#" /     ;  SP, and specials.
                        "$" / "%" /     ;  Used for atoms
                        "&" / "'" /
                        "*" / "+" /
                        "-" / "/" /
                        "=" / "?" /
                        "^" / "_" /
                        "`" / "{" /
                        "|" / "}" /
                        "~"

ASCII 文字コード表に定義されている文字のうち、 制御文字 ( 0x00 ~ 0x1f および 0x7f ) と SP ( 0x20 ) とspecials ( 特殊文字 ? ) を除いたもののようです。 ちなみに specials は、同じ RFC 2822 中の 3.2.1. Primitive Tokens にて示されています。

specials        =       "(" / ")" /     ; Special characters used in
                        "<" / ">" /     ;  other parts of the syntax
                        "[" / "]" /
                        ":" / ";" /
                        "@" / "\" /
                        "," / "." /
                        DQUOTE

これらより、 atext には specials であるところの "." ( &#46; ) は含まれないということになりますが、 local-part には dot-atom トークンが定義されているため、 "." ( &#46; ) を用いることができるという結論になると思います。

"." ( &#46; ) の注意点

allow the period character (".", ASCII value 46) within runs of atext ( 一連のatext中ピリオド(".", アスキーコード46)が許可されている ) とあるように、前後に atext が存在する場合にのみ "." が許可されているということなのでしょうか。

If the string can be represented as a dot-atom (that is, it contains no characters other than atext characters or "." surrounded by atext characters) ( その文字列がdot-atomとして表現され得るならば(つまり、atextとatextに囲まれた「.」以外の文字が存在しないならば) ) という記述や、

dot-atom        =       [CFWS] dot-atom-text [CFWS]

dot-atom-text   =       1*atext *("." 1*atext)

という記述があることから考えても、 atext で囲まれていない "." が存在する場合は dot-atom トークンにはなり得ないということだと考えられますので、「 "." の連続使用」と「 local-part の最初や最後に "." の使用」はできない ( atextで始まり,間にatext又は"."が来てatextで終る ) と覚えておいた方がいいと思います。

リプライ

1 件のリプライが送られています。

2006-02-24T04:43+09:00 - メールアドレスに使える文字列 < JE no hitori chat

&'*+/=?^_@example.com こんなメールアドレスでもいいみたい。...

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など