Hotmail/MSN mailが一部のサイトに届かないという件で調べたところ、
以下がわかった。
(1) MSNでhotmailの仕様を変えた。
変えた内容はテキストの改行としてCR/LFにすることとされているのに、LFのみとしていた(bare LF問題という)。
(CR:Carriage Return LF:Line Feed)
--以下続く--
(2) MTAのうち、いくつかがこれをはじいてしまう。
sendmailは受けとるけど、RFCにstrictなqmail等は「特別」の設定をしていないと、bare LFなメールを拒絶する。
拒絶の仕方にも色々あって、MTAによっては再現性が低いこともある。
(3) ざらっと調べてみた。はじく3つのパターンと通るパターン
A: RFC違反のフォーマットのメールを受け取って捨てて、捨てたログがを残すMTA。
B: 受け取っていながら、ログを残さずに捨てるMTA。
C: 違反したメールを最初は受け取って、悪質サイトと記憶して何通目かで拒絶しちゃうMTA。
D: bare LFでもCRLFと同じ処理をするMTA(sendmailとか)。
D: は問題なく受け取れる。
Aは、管理者ならすぐにわかる。
Bは、全部不通だということで気づきやすい。
Cが、非常にわかりにくく、再現率が100% でないため判断が面倒。
接続しようとすると、IPアドレスから拒絶してログに残さないみたいなんだな。悪質サイトからのアクセスをいちいちログっていたら、ログ爆発で殺されちゃう可能性があるので、ログを残さない設定にしている場合が結構ある。
で、ネットワークダンプとったりとかね。
MSNって、そういえばインターネットの仕様とかよく理解していない会社なんだよな。
ついでに、CRとLFについて。
これって、タイプライターからの伝統で、印字の横位置を起点に戻すのがCR(で、横位置を変えないで行送りするのがLF。
Carriageは紙を動かす装置で、それを戻す(Return)するというのがCarriage Return。
行(Line)を追加(Feed)するのが、Line Feed ってことなんだな。
あと、機種によっては、行を改めて行の先頭から印字させるNew LineとかEnd Of Lineってなのが付いているものがあった。
で、コンピュータのキーボードの元になったテレタイプが、実はこのタイプライターの制御方式を使っていて、最初期のコンピュータは「ついていない機種があるNew LineとかEnd Of Lineではなくて、CRとLFで改行は処理しようぜ」ってなことで、やっている。
さらに、コンピュータのOSで、ちょっとした改行流派があった(今もある)。
New Line機能として、UNIX系はLFで、CP/MやMS-DOSやWindowsはCR+LFで、コモドールやMac(OS 9迄)やOS-9ではCRだったりする。
IBM系の大型コンピュータだと、EBCDICはNEL(NExt Line)という制御があったりするわけな。
20年程前に、大型ホストコンピュータ/パソコン/ミニコン(ワークステーション)でテキストデータ交換のプログラムをやった時に「なんで皆さんバラバラなのぉ?」とか思った経験があるわけだ。