読者です 読者をやめる 読者になる 読者になる

若き JavaScripter の悩み

何かをdisっているときは、たいていツンデレですので大目に見てやってください。愛です。

「メールアドレスのルール」系まとめがそろって間違ってるのでご注意を

メールアドレスのルールのまとめ系のサイトの内容が間違っています。 なので、この類のまとめは安易に信じないように 、という注意喚起をしておきます。

追記(2013/11/27)

twitterはてブをみていたところ、「ユーザーへの啓蒙という観点ではまとめの内容間違ってない」というご意見をたくさんいただきましたので、補足をしておきますね。

どうも「ルール」と「トラブルを避けるためのガイドライン」が混同されているように思います。まとめで紹介されている内容がユーザ向けの「ガイドライン」なのであれば、「+記号使わせてよ」ぐらいしか文句はありません。

ですが、ほとんどのまとめは上記の内容を「ルール」として説明しています。ひどいものにはRFCに基づいてまとめを書いたようにミスリードさせる記事もありました。このような現状を憂い、このような記事を書いたのです。


そもそもこれに気づいた発端は@kusano_kさんのつぶやきです。

ググってみたところ、上位陣のサイトの内容は 軒並み間違っていました 。これは由々しき事態です。

内容が間違ってる検索結果の上位陣はこちら。

(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読んで確認しろ、とはいいません。 だとしても、コピペして公開する前に「内容が間違っているかも」「伝聞調はアヤシイ」とか気づいて詳しい人に聞くなりして欲しかったものです。