メールアドレスのルールのまとめ系のサイトの内容が間違っています。 なので、この類のまとめは安易に信じないように 、という注意喚起をしておきます。
追記(2013/11/27)
twitterやはてブをみていたところ、「ユーザーへの啓蒙という観点ではまとめの内容間違ってない」というご意見をたくさんいただきましたので、補足をしておきますね。
どうも「ルール」と「トラブルを避けるためのガイドライン」が混同されているように思います。まとめで紹介されている内容がユーザ向けの「ガイドライン」なのであれば、「+
記号使わせてよ」ぐらいしか文句はありません。
ですが、ほとんどのまとめは上記の内容を「ルール」として説明しています。ひどいものにはRFCに基づいてまとめを書いたようにミスリードさせる記事もありました。このような現状を憂い、このような記事を書いたのです。
そもそもこれに気づいた発端は@kusano_kさんのつぶやきです。
間違っている。ここの出典は何なのだろう?"・次の文字は原則として使用できない。/ ! “@ # $ % & ‘ ( ) = ~ | \ ^ : ; * + ? < > , ` [ ] { }"大丈夫?実は知らないメールアドレス…URL
ググってみたところ、上位陣のサイトの内容は 軒並み間違っていました 。これは由々しき事態です。
内容が間違ってる検索結果の上位陣はこちら。
(2013/11/27:曝すことが本意ではなかったので削除しました)
そして、間違っているのはこの部分です:
- 次の文字は原則として使用できない。
/ ! “@ # $ % & ‘ ( ) = ~ | \ ^ : ; * + ? < > , ` [ ] { }
@
の直前には英数字しか使えない。.
(ドット)、_
(アンダースコア)は2つ以上連続してはいけない。- メールアドレスの最初の文字は英数字しか使えない。
正しくは:
半角の英数字記号であれば使用できない文字はない
ただし一部の記号(
( ) , : ; < > @ [ ] " \
)を含める場合には@
よりも前の部分全体を"
で囲む必要があり、特に"
と\
を含める場合には、直前に\
を配置しなければならない。@
の直前には英数字・記号(! # $ % & ' * + - / = ? ^ _ ` { | } ~ "
)が使えるただし
"
を使う場合には、先頭にも"
を配置する必要がある。@
の前の部分全体を"
で囲んでいない場合は.
を連続させてはいけないメールアドレスの最初の文字は英数字・記号(
! # $ % & ' * + - / = ? ^ _ ` { | } ~ "
)が使えるただし
"
を使う場合には@
の直前にも"
を配置する必要がある。
解説
RFC5322 に書かれているメールアドレスの仕様を引用して、それぞれの項目を解説していきます。
間違い1: 次の文字は原則として使用できない
正しくは、「半角の英数字記号であれば使用できない文字はない」です(厳密には 印字可能なASCII文字列で使用できない文字はない、ということです)。ただ、一部の記号(( ) , . : ; < > @ [ ] " \
)を使うときには条件があるので注意が必要です(後述)。
RFC5322 の「3.4.1 addr-spec 仕様」では、local-part(@
の前の部分)に dot-atom が使えると書いてありますね。
この dot-atom は「3.2.3 アトム」で atext を .
繋がりで使えると書かれています。
そして、この atext は英数字・記号(! # $ % & ' * + - / = ? ^ _ ` { | } ~
)を含みますから、使える記号はもっと多いのです。
また、local-part に quoted-string が使えるとも書かれており、quoted-string は "
で囲まれた文字列です。この文字列には "
と \
を除く すべての記号 (印字可能 ASCII 記号)が利用できます。
さらに、quoted-string の中では quoted-pair が利用できると書かれているので、"
と \
でさえも、直前に \
を配置すれば利用できるのです。
間違い2: @の直前には英数字しか使えない
正しくは、「@
の直前には英数字と ! # $ % & ' * + - / = ? ^ _ ` { | } ~ "
が使える」です。
RFC5322 の「3.4.1 addr-spec 仕様」によると local-part の末尾は atext か quoted-string のどちらかになるので、atext で使える英数字・記号(! # $ % & ' * + - / = ? ^ _ ` { | } ~ "
)と qupted-string の最後の "
が使えるということになります。ただ、quoted-string にする場合には、先頭に "
を配置する必要がありますね。
間違い3: ドットとアンダースコアは2つ以上連続してはいけない
正しくは、「@
の前の部分全体を "
で囲んでいない場合は .
を連続させてはいけない」です。
dot-atom の場合は .
を連続させることはできませんが、quoted-string の中であれば、.
を連続させても構いません。
間違い4: メールアドレスの最初の文字は英数字しか使えない
正しくは、「メールアドレスの最初の文字には英数字・記号(! # $ % & ' * + - / = ? ^ _ ` { | } ~ "
)が使える」です。
RFC5322 の「3.4.1 addr-spec 仕様」によると local-part の先頭は atext か quoted-string のどちらかになるので、 atext で使える英数字・記号(! # $ % & ' * + - / = ? ^ _ ` { | } ~ "
)と quoted-string の先頭の "
が使えます。ただ、quoted-string にする場合は、@
の直前に "
を配置する必要があります。
まとめ
冒頭で紹介したまとめサイトの内容は、どれもコピペが強く疑われる書き方です。 RFC の文法定義を読むのは難しいことはよくわかりますので、RFC読んで確認しろ、とはいいません。 だとしても、コピペして公開する前に「内容が間違っているかも」「伝聞調はアヤシイ」とか気づいて詳しい人に聞くなりして欲しかったものです。