(RFCに基づく仕様を理解する)今まで僕は、ネット上にあるいわゆる「メールアドレスチェックの正規表現」でメールアドレスのチェック・抽出を行っていたんだけど、それだといろいろ問題が起きてしまい、ちゃんとRFCに基づいてチェックしようということで調べてみました。Format)が最新のようです。下記ではRFC5322の記述を元に読んでいきます。RFC内の記載順ではなく、解釈の順番で引用します。Specification」から記載されています。obs-domain上から順番に解読すると下記のようになります。「addr-spec」(メールアドレス)とは「local-part」と「domain」を「@」で接続したものである。「local-part」とは「dot-atom」または「quoted-string」または「obs-local-part」である。「domain」とは「dot-atom」または「domain-literal」または「obs-domain」である。Atom」セクションで以下のように定義されています。DQUOTE「dot-atom」とは「dot-atom-text」である。その前後に「CFWS」を置くことができる。「dot-atom-text」とは1文字以上の「atext」で、その後に「.」と「atext」のセットが0個以上連結する。「atext」とは上記に列挙されている文字(印字可能で「specials」ではない文字)である。「specials」とは上記に列挙されている文字である。1*atext)」だからのようですね。ちなみに現在はdocomoもAUも新たに設定されるメールアドレスではドットを連続させることはできないようです。Addressing」セクションで以下のように定義されています。CR)「CFWS」とは、1個以上の「comment」または「FWS」である。「comment」の前に「FWS」を置くことができ、最後の「comment」のあとには「FWS」を置くことができる。「FWS」とは、1個以上の「WSP」または「obs-FWS」である。「WSP」の前に、0個以上の「WSP」と「CRLF」のセット、を置くことができる。」)「obs-FWS」とは、1個以上の「WSP」である。「WSP」のあとに、「CRLF」と1個以上の「WSP」のセット、を置くことができる。「comment」とは、「(」と「)」で囲まれた、0個以上の「ccontent」である。「ccontent」の前に「FWS」を置くことができ、最後の「ccontent」のあとには「FWS」を置くことができる。「ccontent」とは、「ctext」または「quoted-pair」また「comment」である。「ctext」とは、上記に列挙されている文字コードの範囲または「obs-ctext」である。「obs-ctext」とは、「obs-NO-WS-CTL」である。「obs-NO-WS-CTL」とは、上記に列挙されている文字コードの範囲である。「quoted-pair」とは、「\」に続く「VCHAR」または「WSP」、または「obs-qp」である。(VCHARは印字可能なASCII文字(0x21-0x7E))「obs-qp」とは、「\」に続くASCIIコード0または「obs-NO-WS-CTL」または「LF」または「CR」である。(LFはASCIIコード10、CRはASCIIコード13)とりあえずここまでで読み取れるのは、「local-part」「domain」の前後、つまり「@」とメールアドレスの前後にはコメントやスペースなどを入れられるということですね。コメントはネスト出来るという面倒な構造です。ana-kutsu.com」こーんなメールアドレスもRFC的にはOKということですね。それと「quoted-pair」についてですが、面倒に定義されていますが結局は「\」に続けばASCII文字すべてを置くことができることになっていますね。NOT)と書かれています。使わない方がいいですし、実際問題これをMTAが正確に考慮してくれるとは期待しない方がいいでしょう。Addressing」セクションで以下のように定義されています。obs-NO-WS-CTL「quoted-string」とは、「DQUOTE」と「DQUOTE」で囲まれた、0個以上の「qcontent」である。「qcontent」の前に「FWS」を置くことができ、最後の「qcontent」のあとには「FWS」を置くことができる。「qcontent」とは、「qtext」また「quoted-pair」である。「qtext」とは、上記に列挙されている文字コードの範囲または「obs-qtext」である。「obs-qtext」とは、「obs-NO-WS-CTL」である。えーと、つまりダブルクォーテーションに囲まれいれば事実上すべてのASCII文字を置けるわけですねぇ。ドットが連続してもいいし、「\」でエスケープすれば改行コードとかもOKなワケです。メールを取り込むプログラムを動かすときなど)、まれに「quoted-string」をもったメールアドレスで配送されるので完全には無視できないですね。postfixの設定によっては、docomoのドットの連続するメールアドレスのメールを転送するときなどにダブルクォーテーションを追加するようです。Addressing」セクションで以下のように定義されています。[CFWS]「obs-local-part」とは、「word」で、その後に「.」と「word」のセットが0個以上連結する。「word」とは、「atom」また「quoted-string」である。「atom」とは、1文字以上の「atext」である。その前後に「CFWS」を置くことができる。このあたりで古いRFCまでカバーできるようになっているようです。上記定義によると「dot.".."@ana-kutsu.com」のようなメールアドレスもOKということになりますね。ふぅ、これで「local-part」の定義終わり。Addressing」セクションで以下のように定義されています。quoted-pair「domain-literal」とは、0個以上の「dtext」である。「dtext」の前に「FWS」を置くことができ、最後の「dtext」のあとには「FWS」を置くことができる。その前とあとに「[」「]」を置くことができ、さらにその前後に「CFWS」を置くことができる。「dtext」とは、上記に列挙されている文字コードの範囲または「obs-dtext」である。「obs-dtext」とは、「obs-NO-WS-CTL」または「quoted-pair」である。Addressing」セクションで以下のように定義されています。atom)「obs-domain」とは、「atom」で、その後に「.」と「atom」のセットが0個以上連結する。これで全部定義読んだかなぁ。5321)か、「[」と「]」でくくられたIPアドレスじゃないとダメなようです。このへんはWikipedia情報です。5321により長さが、「local-part」は64オクテット、「domain」は255オクテット、「addr-spec」全体で256オクテットに制限されています。(Private)URLCommentsAuthenticationCaptcha:画像の中に見える文字を入力してください。