メールアドレスのルールのまとめ系のサイトの内容が間違っています。 なので、この類のまとめは安易に信じないように 、という注意喚起をしておきます。
追記(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読んで確認しろ、とはいいません。 だとしても、コピペして公開する前に「内容が間違っているかも」「伝聞調はアヤシイ」とか気づいて詳しい人に聞くなりして欲しかったものです。