●JavaMailでのWindowクライアント向け文字化け解決

JDK(Sun実装限定) 5.0以上
JavaMail -

まずはJavaMailで本文を指定する際のコードの抜粋です。(該当箇所以外は省略しています。)
MimeMessage mimeMessage = new MimeMessage( session );
mimeMessage.setContent( MimeUtility.encodeText( bodyString , "iso-2022-jp" , "B" ) , "text/plain; charset=iso-2022-jp" );
mimeMessage.setText( bodyString , "iso-2022-jp" );

通常、これだけでは一部の特殊文字が文字化けします。
これをUTF-8など他の文字コードを使う方法も存在しますが、
これらに対応していないメールクライアントなども考えると採用が難しい場合もあります。
そこで、この文字コードを採用する場合、上の実装に加えてJava起動時のjavaパラメータに以下の値を指定します。

-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP

実装コードでは"iso-2022-jp"と言う文字コードを指定していますが
この文字コードの変換の為にSunが提供している標準の変換マッピングはWindowsのそれとは異なる仕様が存在します。
上記の起動パラメータを指定することで"iso-2022-jp"のコード変換を
Sunが提供するWindows仕様用のものを採用して文字化けを回避することができます。


もう1つ有名な文字化けが本文の末尾に?w)(メールクライアントにより異なる)が出力されてしまう件です。
これを解決する一番簡単な方法は
本文となる文字列(上記抜粋コードのbodyString変数)の末尾に"\n"を付与することです。
これにより簡単に解決できます。