JavaMailを素で使った場合の日本語メール環境での問題
JavaMail完全解説原稿(ダウンしてるみたい)から、当時の問題点をピックアップして、Java6の現在だとどれだけ楽ができるか考えてみてる。
- ヘッダの問題
- encoded-wordの前後に正しく空白を入れてくれないメイラがある。
(空白のない箇所でencoded-wordの区切りとしてしまう)- encoded-wordをquoteしてしまう(""で囲んでしまう)メイラがある。
- MIMEエンコードしないJISコードをそのまま記述するメイラがある。
- MIMEエンコードしておきながら、そのcharsetとエンコードされた内容が合っていないメイラがある。
- JavaMailは一字でも非ASCII文字が含まれるとヘッダ全体をエンコードしてしまう。
- 日本語を含む添付ファイル名をJavaMail側でデコードすることができない。
- 日本語を含む添付ファイル名を使ったメッセージをJavaMailが生成できない。
- 日本語を含む添付ファイル名について、RFC2047のヘッダのエンコーディングを適用するメイラがある。
- 日本語を含む添付ファイル名について、JISコードで記述するメイラがある。
- 日本語を含む添付ファイル名について、Shift_JISコードで記述するメイラがある。
- Date:ヘッダに"JST"タイムゾーン("+0900"ではなく)を用いるメイラがある。
- ボディの問題
- Content-Type:ヘッダを付けないメイラがある
- Content-Type: textとするメイラがある
- 文字エンコーディングとしてUTF-7を用いるメイラがある
- Content-Transfer-Encoding: 7-bitとするメイラがある
- 本文がISO-2022-JPであるにもかかわらず、Content-Transfer-Encoding: 8bitとするメイラがある
- その他
- '〜'や'−'といった文字が化けてしまう場合がある。
1-6はjavamail1.4でfixされたとなってる。2-3はJava側が対応してるはず。3-1はx-windows-iso2022jpを使えばいいし、jvmに変換テーブル差し替えを指示すればコード不要。(でも「¬⊥√∫」は問題が残りそう)
後はメール受信時の問題だから、概ね大丈夫になったということかな。
受信は結構大変そう。まぁ「出力は厳格に、入力は寛容に」といった原則だから大変なのはしょうがない。結局今も昔も面倒さ加減はほとんど変わってない、と。