2007-11 アーカイブ

http://hxxk.jp/2007/11/

メールアドレスに使用できる文字列および、メールアドレスの判定の正規表現関連のまとめ

記事データ

投稿者

真琴

投稿日時

2007-11-20T23:09+09:00

タグ
概要

メールアドレス絡みの話が盛り上がっていたので、以前勉強会用にまとめた関連リンクを、追記して再度まとめなおしておきます。

リプライ

1 件のリプライがあります。

記事本文

メールアドレスと RFC 絡みの話を自分用にまとめ

ドコモもauもいいかげんにメールアドレス設定の仕様を直せ。という記事がはてなブックマークの人気エントリー入りをしているようですね。 その記事が投稿されるにあたって、 DoCoMoの説明にある「RFCに準拠しています」はウソが再編集されて、昨日の Movable Type の Trackback Auto-Discovery は記事ごとにどうにかできないかで取り上げた Trackback Auto-Discovery の暴発につながっていたのです、実は。

せっかくの機会なので (?) 、メールアドレスと RFC 絡みの話をもう一度まとめてみたいと思います。 と言っても、過去の自分の記事や、他のサイトの記事のリンクを整理するだけですが。

メールアドレスに使用できる文字列絡みの記事

RFC
2004-10-09: メールアドレスに使える文字

つまり,メールアドレスはatextで始まり,間にatext又は"."が来てatextで終るということらしい.

2004-10-10: hxxk.jp - メールアドレスに使える文字

atext で囲まれていない "." が存在する場合は dot-atom トークンにはなり得ないということだと考えられますので、「 "." の連続使用」と「 local-part の最初や最後に "." の使用」はできないと覚えておいた方がいいと思います。

2004-10-22: RFCを読まなかった携帯キャリアの罪

auやdocomoの携帯電話上ではメールアドレスの設定変更の画面において、 xxxx.@docomo.ne.jpのように設定しても通ってしまう。 結果、Exchangeやpostfixなどのメールサーバからこうしたメールアドレスに送信しようとするとエラーになる。 携帯キャリア(auやdocomoのこと)のエンジニアがメールアドレスのフォーマットにまつわるRFCを理解しきらずに メールアドレスの設定変更システムを作ったことが原因だ。

2004-10-23: hxxk.jp - RFC によるメールアドレスの local-part におけるピリオドの取り扱いについての考察

RFC 2822 における、 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. という記述と、 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) という記述が、 メールアドレスの@の直前にはピリオドは使ってはいけない ということの根拠になると思います。

2005-03-15: hxxk.jp - 携帯電話のメールアドレスにおけるピリオドの扱い

実際に禁則処理を行っているかは分かりませんが、 au はピリオドによって RFC に準拠しないアドレスに設定されることは無いようです。 vodafone は @ の直前への配置を禁じているだけで、連続使用は注意書きだけに留めています。 DoCoMo は注意書きだけで全く禁止していません。

2005-03-16: hxxk.jp - FOMA SH901iC の不具合の一部は DoCoMo 自身の過去のツケ

これは DoCoMo のプレスリリースですが、機能向上と表現するべき所じゃないでしょう。 辛辣に言ってしまえば、単に過去のミスのツケが廻ってきた分を粉飾しているだけなのですから。

2006-04-11: DoCoMoの説明にある「RFCに準拠しています」はウソ

もしかして今現在でも「iメニュー」のメールアドレス変更画面は、@の直前にピリオドを置くような設定をユーザーに許してしまっているのか? もしそうだとすれば、もうそういう風に設定しちゃったユーザーはしょうがないとして、今後そういうアドレス設定が増えないように、設定画面を仕様変更すべきなんじゃないのか? それすらしないどころか逆に今の仕様は正しいという誤った情報を流すってのはどうなのよ?

2006-04-30: ドコモの説明から「RFCに準拠しています」が削除

「RFCに準拠しています」の一行が消えている。

2006-06-01: スラッシュドット ジャパン | auのEメールアドレスが相互接続性を保障できないルールに変更?

kazu070曰く、"インプレス ケータイWatchの au、Eメールアドレスの設定文字数を最大30文字に拡張 によると、メールアドレスの20文字から30文字への文字数の拡張にあわせて、「「_」(アンダースコア/アンダーバー)の利用や、「.」(ピリオド/ドット)の連続使用、@直前での利用も可能となる。」という仕様が発表されている。 効果としては、迷惑メールを受信しにくくなるという後ろ向きなメリットが挙げられる。

2006-06-02: みんなで渡れば怖くない - au by KDDI メールアドレスにRFC違反を故意に許すの巻

いくらナンバーポータビリティ実施が近づいてるからって、DocomoのユーザーがKDDIに乗り換えたとしてもメールアドレスは@docomo.ne.jpのままなんてことは不可能なんだろうから、メールアドレスのローカルパート(@の左側)仕様だけ合わせて改悪してもメリットよりデメリットのほうがよほど大きい。

2007-08: メール アドレスの @ より前にピリオドがあるなど RFC に準拠していない宛先に Outlook からメッセージを送信できない

RFC 2821、RFC 2822 では、@ の前の文字列をピリオドで区切ることを許可しています。 しかし、区切り文字であるピリオドや @ を連続して使用することを許可していないことにより、この現象が発生します。

これ、タイトルだけ読むと「 @ の前にピリオドが存在すると RFC に準拠していない」と誤認しそうですね。 後でフィードバックを送ろうかなあ。

2007-11-19: ドコモもauもいいかげんにメールアドレス設定の仕様を直せ。

回避策はもちろん無い。 これはOutlookの仕様であり、かつ、「電子メール」そのものの、もともとの仕様だからだ。 そんなおかしなメールアドレスを取得できてしまうサービス提供者=ドコモとau=に100%の責任がある。

2007-11-20: 404 Blog Not Found:ドコモもauはとりあえず"da..me."@を受け取れるようにしとくべし

実はRFC2822の規定では、da.me..@docomo.ne.jpはNGだが、意外なことに"da.me.."@docomo.ne.jpはOKなのだ。 @の前の部分が""でくくられている場合、RFC2822はそれを特別扱いすることになっている

メールアドレスかどうかの判別を行う正規表現絡みの記事

2007-05-30: はてなブックマーク - 正規表現:メールアドレスかどうか調べる - phpspot

これから新規メアドを作成するような入力欄がこれでは全然ダメ。 しかし既存メアドの入力欄(一般的なメール欄)は、RFC違反のメアドが実在する以上、この程度で仕方ないと言える。

2007-05-31: PHPでメールアドレスかどうか調べる方法

ていうか「メールアドレス」「正規表現」でぐぐる最初に出てくるリソースに、思いっきりメールアドレスに一致する正規表現は「ありません」なんてあって、その下に条件付きの鬼のような正規表現が紹介されている。 メールアドレスの闇は深い。 ヘタに触れると火傷する。

2007-06-01: re: PHPでメールアドレスかどうか調べる方法 (ハズレ日記)

DNS引いてドメインの有効性チェックまでやるsymfonyはヤリ過ぎ。

2007-06-02: PHPでメールアドレスを確認する「正しい方法」(Linux Journal誌の記事より) - J0hn D0e の日誌

「メールアドレスに一致する正規表現は「ありません」」って書いてあるけど、よくよむと、「クオートすればなんでも入るから」って話ですよね。

2007-10-17: 秋元@サイボウズラボ・プログラマー・ブログ: phpspotの人は正規表現について語らないほうがいいのでは

これは、"example@so-net.ne.jp"とか"example+tracer@gmail.com"をメールアドレスではないと判定する。 この簡単さだと、メールアドレスじゃないものを通してしまう取りこぼしも多いはず。

2007-10-18: 秋元@サイボウズラボ・プログラマー・ブログ: phpspotの件の続報

なお、今も注釈つきで載り続けているコードはこれ。使っちゃだめよ。

一度このネタを使って勉強会で発表した

実は、これらのネタは以前 PHP in Fukuoka の第 2 回勉強会 (2007 年 6 月 3 日開催 ) にて PHP フレームワークと携帯メールアドレスの罠というタイトルで発表させていただいたものです。 今回メールアドレス絡みの話が盛り上がっていたので、その時にまとめていたリンクを再利用しておくか、という感じで書いたのが今回のまとめです。

ちなみに、私はメールサーバの運用やメールサービスの開発などには全く関わったことがないので、リンク記事の選定や内容の引用が適切かどうかの判断は、ご覧になる皆さんで行っていただきたいと思います。

リプライ

1 件のリプライが送られています。 この記事に対するご意見やご質問、ご感想などありましたら個別記事ページの送信フォームからお送り下さい。

2008-01-25T18:07+09:00 - あーる

こちらも参考にしてください。

Movable Type の Trackback Auto-Discovery は記事ごとにどうにかできないか

記事データ

投稿者

真琴

投稿日時

2007-11-19T21:53+09:00

タグ
概要

Movable Type の Trackback Auto-Discovery は、記事を再度編集する際にも再度トラックバックを送信してしまうので、ユーザは安易に設定することが無いようにして欲しいという主張、あるいは解決につながるプラグインを誰かお願いします、というワガママ。

リプライ

2 件のリプライがあります。

記事本文

少しずつ weblog を書く癖を取り戻していこう

約 3 ヶ月半ぶりの記事です。 本当は休止中と謳っていても月に 1 ~ 2 本は記事を書いていたいのですが......。

非業界人があそびにいったよシリーズの第 3 段はもう少しお待ちください、録音させていただいた内容を踏まえてきっちりとレポートしたいので。 実はレポートする前に エスカフラーチェ LLC | pur*log の purprin さんに再びお会いすることになったので、怒られるかも......と思いましたけど実際はそのことに触れられませんでした。 ダメな子だと既に諦められているのかもしれません。

あまりに間を空けすぎるのも何なので、ひとつひとつの記事の分量を少なめにしながらリハビリ ( という表現が正しいのかどうか分かりませんが ) をしていこうと思います。 今回は、ある記事からトラックバックを送信されて思ったことをひとつ。

Movable Type の Trackback Auto-Discovery は新規投稿時以外でも有効になる

Movable Type には Trackback Auto-Discovery という機能があります。 これは簡単に説明すると、送信側と受信側の機能に分類でき、送信側は 「記事の新規投稿や編集をした時に、記事中に含まれるリンク先の内容を取得して、トラックバック ping を自動で検知し、トラックバックを送信する」 という機能で、受信側は 「所定の形式の RDF をページ中に挿入しておくことで、トラックバック ping の自動検知を有効なものとする」 機能です。 ( 本当はもっと詳しい仕様が定められているのですが、その辺りは TrackBack Technical Specification - Auto-Discovery of TrackBack Ping URLs あたりを参照してください。あるいは拙記事 Movable Type の Trackback auto-discovery あたり。 )

Movable Type 4 ドキュメントトラックバック設定では、 自動検知を設定しておくと、新しくエントリーを投稿したときにエントリー内のリンクをすべてチェックし、リンク先にトラックバックURLがあった場合にはトラックバックを送信します と説明されていますが、実際は新規投稿時に加え、既に作成済みの記事を編集して保存しなおした際にも再びトラックバック ping を検知します。 ( 更に、記事の公開の状態が「公開」であれば、トラックバックの再送信を行います。 ) まとめると、

  • 記事の公開の状態が「公開」であるか
    • 未公開 ( 下書き ) である
      • 記事内にリンクが含まれているか
        • 含まれていない
          • トラックバック ping は検知されないし、トラックバックも送信されない
        • 含まれている
          • トラックバック自動検知を有効にしているか
            • 有効にしていない
              • トラックバック ping は検知されないし、トラックバックも送信されない
            • 有効にしている
              • 記事内のリンクの URL を「トラックバック送信先の URL 」欄に保存し、トラックバック ping の検知やトラックバックの送信は行わない
    • 公開である
      • 記事内にリンクが含まれているか
        • 含まれていない
          • トラックバック ping は検知されないし、トラックバックも送信されない
        • 含まれている
          • トラックバック自動検知を有効にしているか
            • 有効にしていない
              • トラックバック ping は検知されないし、トラックバックも送信されない
            • 有効にしている
              • リンク先の記事は Trackback Auto-Discovery の RDF を記事内に挿入しているか
                • 挿入していない
                  • トラックバック ping の検知は試みられるが、検知できずにトラックバックは送信されない
                • 挿入している
                  • トラックバック ping が検知され、トラックバックが送信される

という流れです。 記事が新規投稿であるか再編集であるかは関係ありません。

過去の記事をよく手直しする場合は、 Trackback Auto-Discovery は有効にしない方が良い

過去の記事に、最近書いた新しい関連記事や、外部の関連記事へのリンクを追記するなど、過去の記事であっても手直しをすることはあります。 それ自体は悪いことではありません。 しかし、 Trackback Auto-Discovery を有効にしていて、かつ記事内にリンクが含まれていると、手直しの度にトラックバックを送信することになります。 Trackback Auto-Discovery の設定は記事ごとではなくて weblog 自体に行うものなので、意外と気付いていない方も多いかも。 ( 今回この記事を書くきっかけになった weblog を書いている方も、 Movable Type の設定や Web システムの挙動に詳しいと思われる方なので、見落としやすい点なのかもしれません。 )

いっそのこと 「 Trackback Auto-Discovery そのものを無効にしてくれ ! 」 と言いたいところですが、それは解決策としては突拍子もないでしょう。 ( まあ、そもそも初期設定では無効になっている機能なのですが。 ) 他に考えられる解決策としては、次のような感じでしょうか。

過去の記事を手直しする場合は、一時的に Trackback Auto-Discovery を無効にする

Trackback Auto-Discovery を通常は有効にしつつ、無用なトラックバックの再送信を防ぐための解決策。 でも、いちいちこんなことやるくらいだったら Trackback Auto-Discovery の機械的な自動処理というメリットが薄れます。 最初から Trackback Auto-Discovery を無効にして、トラックバックを送るべき時だけ手動で送った方がトラックバックのクオリティは高くなるでしょうし。

過去の記事を手直ししてトラックバックを再送信してしまった場合は、コメントなりメールなりで削除のお願いをする

これも機械的な自動処理のメリットが薄れます。 トラックバックとはちょっと話が違いますが、 Twitterでナンパされて会ってきた - CROOK 暴発 という表現が面白いですね。 「トラックバックを再度暴発させてしまったのでお手数ですが拭き取ってください。」

舐め取ってください、でもいいか。 いや、喩えですよ ?

Trackback Auto-Discovery は内部リンクに対してのみ有効にする

外部リンクに対して有効にするから、暴発させたあげくに拭き取り行為まで相手の手を煩わせることになるのです。 内部リンクであれば暴発しようが予想外の記事に発射しようが後始末は自分でできるのですが。

Trackback Auto-Discovery を記事単位で管理できるようなプラグインを作る

私はスキルが無いので作ることができませんが、 weblog 全体にかかる Trackback Auto-Discovery の設定を、記事単位で管理するようなプラグインを作ることができれば機械的な自動処理のメリットを失わずに、思わぬ暴発を防げるのではないでしょうか。 記事ごとに設定するのが煩わしいのであれば、例えば 「記事の新規投稿時は Trackback Auto-Discovery を有効に、再編集時は Trackback Auto-Discovery を無効にする」 といった判別でも良い気がします。 安全装置とでも言いますか、再編集時はロックをかけておく、的な。

もっと根本的な解決策として 「 hxxk.jp の Trackback Auto-Discovery 用の RDF を削除する」 というものもありますが、敢えて RDF は挿入したままでの解決策を考えてみました。

そもそも挿入していなければ暴発の被害を受けることもないので、他人に注文を付ける前に自衛策を講じるべきと言われるかもしれませんが、しばらくは挿入したままにしておきます。 発射する側も仕様を完全に知っておいて欲しいとは言いませんが、ある程度の知識を身に付けて、何度も何度も暴発させることのないようにして下さい。

うん、何か途中から変な方向に逸れたのは久しぶりの記事だから感覚が掴めないからじゃなく、途中で CROOK を引き合いに出してしまったせいだ、ということにして良いでしょうか。 Twitterでナンパされて会ってきた - CROOK を読んで、次に東京に行くことがあって都合が合えば legnum さんと飲んでみたいなあ、と思って記事に絡めたのが失敗でした。

※ legnum さんの名誉のために言っておくと、今回のトラックバック暴発をかましたのは legnum さんではありません。

※重ねて legnum さんの名誉のために言っておくと、 legnum さんは真面目な記事や為になる考察を CROOK で数多く書かれています ! ケツなんて見ていませんから !

リプライ

2 件のリプライが送られています。 この記事に対するご意見やご質問、ご感想などありましたら個別記事ページの送信フォームからお送り下さい。

2007-11-20T12:49+09:00 - is

こんにちは。えーと、記事と関係のないコメントで恐縮なのですが、CSSが適用されていないのは仕様でしょうか?

2008-01-07T22:27+09:00 - 望月真琴

仕様「でした」。新しい CSS を作るまでは link 要素および xml-stylesheet 処理命令を外していたのです。

補足情報

著作、講演、制作実績など