雑文発散

«前の日記(2008-10-20) 最新 次の日記(2008-10-22)» 編集
過去の日記

2008-10-21 [長年日記]

[] ETCマイレージからポイント還元された

1000ポイント突破したらしく、8000円の無料通行分が発生したとのこと。有料道路の通行料50円につき1ポイントということなので、1000ポイントは50000円分の通行料を支払ったという計算だ。

プントに乗り始めて、ちょうどそろそろ1年になるんだけど、このペースは早いのか遅いのか?

[] 国際化ドメイン対応のメール規格が RFC 化されていた

メール関係の RFC2821RFC2822RFC5321RFC5322 に更新されたのには気がついていたのだが、国際化ドメイン対応の規格として RFC5335RFC5336 というのが9月に発行されていたようだ。

RFC5335 はタイトルが「Internationalized Email Headers」となっており、国際化ドメインを利用した場合のメールヘッダ部分のフォーマットについて記載されている。RFC5336 はタイトルが「SMTP Extension for Internationalized Email Addresses」で、国際化ドメインを使って SMTP 通信をする場合のやりとりが記載されている。

なんか数字ばっかで関連が良く分からないと思うので、ちょっとまとめ。各 RFC の関係は次のようになる。

メール関係RFC関係図

基本的に「国際化」は、UTF-8 を使って実現するようだ。RFC5335 には次のように記載されている。

utf8-addr-spec = utf8-local-part "@" utf8-domain

と、ここまで「国際化ドメイン」と書いていたのだが、正確にはドメイン部分だけでなく、ローカルパート(いわゆるユーザ名部分)も UTF-8 による国際化表現を行えるような規格になっている。つまり「鈴木@サンプル.jp*1」などと言ったメールアドレス表現が定義されている訳だ。

ここまでなら単に使える文字が拡張されただけとちゃうの?というところだが、メールヘッダの表記方法が拡張されているので、ヘッダ解析などをしている場合には注意が必要になりそうだ。

具体的には angle-addr ( < と > とで囲われたメールアドレス)の拡張がちょっとイヤな感じだ。

これまでの RFC2822 や、その後継の RFC5322 での angle-addr は次のような定義だった。分かりにくくなるので、obsolute の定義は除いている。

angle-addr = [CFWS] "<" addr-spec ">" [CFWS]

[CFWS] というのは、とりあえず、スペースとかタブとかの空白文字と考えてもらえば良い*2。これが RFC5335 では次のような定義になっている。同じく obsolute は除く。

angle-addr =/ [CFWS] "<" utf8-addr-spec [ alt-address ] ">" [CFWS]
alt-address = FWS "<" addr-spec ">"

「=/」というのは間違いではなく、ABNF 定義では「増加代替する」という意味らしい。つまり、内容の追加。この件を調べていて、いまさっき知った。

で、これがなんでイヤな感じかと言うと、次のようなメールアドレス(正確にはメールボックス)表現が可能になるからだ。

<non-ASCII@non-ASCII <ASCII@ASCII>>

アングル( <, > )の中にアングルが入るというこの構造、今までの RFC2822 や、その後継の RFC5322 では認められていない。なんでこのように non-ASCII と ASCII の2つのアドレスを併記する場合があるのかと言うと、この規格 UTF-8 対応 SMTP(UTF8SMTP と呼ぶようだ)に対応していない場合にダウングレード処理を行う場合にこういった表記をするようだ。

受信メールから From アドレスを解析して、どーのこーのというような処理をする場合、この辺の拡張も想定しておかないといけなくなる時代が来るのかも。。。と思ったのだが、よく考えると、「国際化ドメインのメールアドレス」に対応させる時点でいろいろと考えなきゃいけない訳だよな。

国際化メールアドレスの利用が進んできた場合、今までのメールアドレスチェックルーチンは全く持って使えなくなる訳なので。

国際化ドメインについては、Web がなんとか対応している状況で、メールは全く使えないのでダメじゃん!と思っていたのだが、この規格が決まったことで普及が進むのだろうか? 個人的にはあんまり好みじゃないけどなー。

*1 国際化ドメインのexampleって何を使うのが望ましいのかな?

*2 正確に言うとフォールディングやコメントも含まれるのだが、ここでは深く考えない。