現象
メール送信した際、添付したファイルのファイル名が文字化けしていました
javax.mail '1.6.2'
修正前コード
import javax.mail.internet.MimeUtility;
・・・
MimeUtility.encodeWord(new File(filePath).getName(), "UTF-8", "B");
原因
エンコードされた添付ファイル名のデータの行末をみてみると?=
ではありませんでした
行末が?=
でないと、デコード処理をしないとのことです
JavaMailでは添付のデータをBASE64でエンコードした後に、添付ファイル名をMimeBodyPartのオブジェクトにセットするのですが、エンコードがうまくいっていないようです
解決 修正後コード
MimeUtility.encodeWord(new File(filePath).getName(), "UTF-8", "B");
は
String fileName = new File(filePath).getName();
に変更し、
System.setProperty("mail.mime.encodefilename", "true");
System.setProperty("mail.mime.charset", "UTF-8");
Systemのプロパティを追加しました!
-
mail.mime.encodefilename
を"true"に設定すると、MimeUtilityメソッドのencodeTextを使用して、ファイル名に含まれるASCII以外の文字をエンコードします -
mail.mime.charset
はSystemプロパティを使用して、エンコードされた単語やテキスト部分に使用されるデフォルトのMIME文字を指定します
これを設定することで添付ファイル名の文字化けを解決できました!