JavaMailを素で使った場合の日本語メール環境での問題

JavaMail完全解説原稿(ダウンしてるみたい)から、当時の問題点をピックアップして、Java6の現在だとどれだけ楽ができるか考えてみてる。

  1. ヘッダの問題
    1. encoded-wordの前後に正しく空白を入れてくれないメイラがある。
      (空白のない箇所でencoded-wordの区切りとしてしまう)
    2. encoded-wordをquoteしてしまう(""で囲んでしまう)メイラがある。
    3. MIMEエンコードしないJISコードをそのまま記述するメイラがある。
    4. MIMEエンコードしておきながら、そのcharsetとエンコードされた内容が合っていないメイラがある。
    5. JavaMailは一字でも非ASCII文字が含まれるとヘッダ全体をエンコードしてしまう。
    6. 日本語を含む添付ファイル名をJavaMail側でデコードすることができない。
    7. 日本語を含む添付ファイル名を使ったメッセージをJavaMailが生成できない。
    8. 日本語を含む添付ファイル名について、RFC2047のヘッダのエンコーディングを適用するメイラがある。
    9. 日本語を含む添付ファイル名について、JISコードで記述するメイラがある。
    10. 日本語を含む添付ファイル名について、Shift_JISコードで記述するメイラがある。
    11. Date:ヘッダに"JST"タイムゾーン("+0900"ではなく)を用いるメイラがある。
  2. ボディの問題
    1. Content-Type:ヘッダを付けないメイラがある
    2. Content-Type: textとするメイラがある
    3. 文字エンコーディングとしてUTF-7を用いるメイラがある
    4. Content-Transfer-Encoding: 7-bitとするメイラがある
    5. 本文がISO-2022-JPであるにもかかわらず、Content-Transfer-Encoding: 8bitとするメイラがある
  3. その他
    1. '〜'や'−'といった文字が化けてしまう場合がある。

1-6はjavamail1.4でfixされたとなってる。2-3はJava側が対応してるはず。3-1はx-windows-iso2022jpを使えばいいし、jvmに変換テーブル差し替えを指示すればコード不要。(でも「¬⊥√∫」は問題が残りそう)
後はメール受信時の問題だから、概ね大丈夫になったということかな。
受信は結構大変そう。まぁ「出力は厳格に、入力は寛容に」といった原則だから大変なのはしょうがない。結局今も昔も面倒さ加減はほとんど変わってない、と。