記事本文
よそで参考記事として出されるのは嬉しい
RFCを読まなかった携帯キャリアの罪 - Webビジネスコンサルタントのネタ帳のコメント欄にて、北村さん ( 曉に死す ) が メールアドレスに使える文字を参考記事として提示して下さっていました。
自分で活用しやすいように整理して web に記録していくので、必要とされる情報が私の記録の中にあるのならどうぞご活用ください、というのがこのサイトのスタンスです
と言っているのですが、実際に活用されると非常に嬉しいものです。
メールアドレスに使える文字の補足
補足というか要点のみの抜粋ですが、
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.
(
いくつかの構造化されたヘッダフィールドボディはまた、一連のatext中ピリオド(".", アスキーコード46)が許可されている。
追加の「dot-atom」トークンがその目的で定義される。
)
という記述と、
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に囲まれた「.」以外の文字が存在しないならば)
)
という記述が、
メールアドレスの@の直前にはピリオドは使ってはいけない
ということの根拠になると思います。
例を挙げて示すと、
- "." で始まる local-part で構成されるメールアドレス ( 例 : .makoto@hxxk.jp )
- "." で終わる local-part で構成されるメールアドレス ( 例 : makoto.@hxxk.jp )
- "." が連続する local-part で構成されるメールアドレス ( 例 : makoto..mobile@hxxk.jp )
これらのような local-part に存在する "." は、
atextに囲まれた「.」
ではありません。
RFC 2821 ? RFC 2822 ?
RFCを読まなかった携帯キャリアの罪 - Webビジネスコンサルタントのネタ帳にて根拠として取り上げられている RFC は RFC 2821 の方ですが、私は RFC 2822 の方で前項のように理解していました。 これは単純に検索で Request for Comments: 2822 - Internet Message Format を見つけただけであって、 RFC 2821 の方を読むべきなのか RFC 2822 の方を読むべきなのかはあまり気に留めていませんでした。 RFC 2822 の方も知りたい情報のみを斜め読みしただけですし。
@の直前にピリオドがある等、RFC に準拠していないアドレスを含むメッセージを送受信できないでは、
- 概要
この資料では、Exchange 2000 Server と Exchange Server 2003 で、インターネット メール アドレスが xxxx.@xxxxxx や xx..xx@xxxxxx のように、ピリオドがメール アドレスの最後についていたりピリオドが連続しているような RFC2821 に準拠していないアドレスを含むメールを送受信できない現象について記述しています。
- 原因
Exchange 2000 Server と Exchange Server 2003 の SMTP サービスは、アドレスのフォーマットが RFC2821 に準拠していない場合エラー "501 5.5.4 Invalid Address" を返します。 RFC2821 では、"@" の前の文字列をピリオド"." で区切ることを許可しておりますが、区切り文字であるピリオドや"@" 等を連続して使用することを許可しておりません。 従いまして、このようなアドレスを持ったメッセージの送受信を拒否しています。
これは Exchange 2000 Server と Exchange Server 2003 の仕様です。
と書かれてありますし、 RFC 2821 を参考にした方が良いのかもしれません。
RFC 2821 を読んでみる
Request for Comments: 2821 - Simple Mail Transfer Protocol の、メールアドレスに関する部分の記述を読んでみると、
Mailbox = Local-part "@" Domain
Local-part = Dot-string / Quoted-string
; MAY be case-sensitive
Dot-string = Atom *("." Atom)
Atom = 1*atext
Quoted-string = DQUOTE *qcontent DQUOTE
String = Atom / Quoted-string
と書かれてあります。
Dot-string = Atom *("." Atom)
とあり、かつ
Atom = 1*atext
とあるため、
Dot-string = 1*atext *("." 1*atext)
と読み換えて良いでしょう。
これは Request for Comments: 2822 - Internet Message Format における
dot-atom-text = 1*atext *("." 1*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)
であると考えて良いと思います。
ただ、私は先に Request for Comments: 2822 - Internet Message Format を読んでいたからこの根拠を持っているわけであって、 Request for Comments: 2821 - Simple Mail Transfer Protocol だけを読んでいたら分からなかったかもしれません。
dot-atom-text = 1*atext *("." 1*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)
であることを表しているのならば、 Request for Comments: 2821 - Simple Mail Transfer Protocol だけでも
xxxx.@xxxxxx や xx..xx@xxxxxx のように、ピリオドがメール アドレスの最後についていたりピリオドが連続している
local-part は RFC 2821 に準拠していないと判断できると思いますが、この記述方法がそれを表しているかといういうことまでは私には分かりません。

