Pyon's Diary
2007-07-20 舊 平成拾玖年水無月漆日 (金・晴) [長年日記]
電子郵便(メール) -- 990 バイトの謎。
職場のメール・サーバから送出したメールが文字化けをしてゐる、と同僚から相談された。
メールを見せて貰ふと文章の一部が慥かに文字化けをしてゐた。同じ文章で自分に送信して貰ひ、Thunderbird (2.0.0.5) で受信すると一行が物凄く長く、其乃後ろの部分が文字化けしてゐる事が判つた。
然う云へば RFC2822 で一行の長さが規定されてゐたよな、と思ひ出し觀てみると末尾の CRLF を覗いて 998 バイトだつた。
2.1.1. Line Length Limits
There are two limits that this standard places on the number of characters in a line. Each line of characters MUST be no more than 998 characters, and SHOULD be no more than 78 characters, excluding the CRLF.
[RFC2822 -- Internet Message Formatより引用]
其れに引つ掛かつたのかと思ひ、次の樣なファイルを用意して、
From: foo@example.com To: bar@example.com Subject: Test 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
此を問題となつたメール・サーバからと、比較の爲其れとは別のサーバからそれゞゝ自分宛に送信してみた。
cat test.txt | sendmail hoge@example.com
すると、
- 問題となつたメール・サーバから送信した方は 991 バイト目に CRLF が插入されてゐた。
- 別のサーバから送信した方は CRLF が插入されず、それゞゝ一行で受信出來た。
然し、自分の Gmail に送信してみると、結果は逆だつた。更に Thunderbird を使つてゐる協力會社の人に送つてみたが、其方も自分とは逆の結果に成つた然う。
此でさつぱり譯が判ら無く成り、「990 バイト 改行」で檢索すると更に譯が判ら無く成つた。
- Mozilla-gumi Forum [One Message View / Re[2]: 自動改行設定が正常に動作しない。(Bug 4325 -- 長い行の自動改行を無効にしてゐると文字化けする。)
- [mew-dist 26093] 1000 Octet を越える行を含むメッセージの處理。
- [PHP-users 8325] PHP4.2.1 と PHP4.1.2 での mb_send_mail 凾數について。
- こころ -- あまやどり -- もじばけ。
- 2ch Vodafone 質問スレッド Q&A @Wiki メール。
何かメールサーバが CRLF を入れてゐたり、クライアントソフトが CRLF を入れてゐたり、誰が犯人なのかさつぱり判らん。
仕方が無いので入力畫面で一行の文字數(バイト數)を檢査してエラーを出力する事に成るだろうな。