LoginSignup
4
2

More than 5 years have passed since last update.

java mailの添付ファイル名が文字化けした際の解決策

Last updated at Posted at 2019-01-09

現象

メール送信した際、添付したファイルのファイル名が文字化けしていました:cold_sweat:
:envelope: javax.mail '1.6.2'

修正前コード

import javax.mail.internet.MimeUtility;
・・・
MimeUtility.encodeWord(new File(filePath).getName(), "UTF-8", "B");

原因

エンコードされた添付ファイル名のデータの行末をみてみると?=ではありませんでした
行末が?=でないと、デコード処理をしないとのことです

JavaMailでは添付のデータをBASE64でエンコードした後に、添付ファイル名をMimeBodyPartのオブジェクトにセットするのですが、エンコードがうまくいっていないようです

解決:bulb: 修正後コード

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文字を指定します

これを設定することで添付ファイル名の文字化けを解決できました!

参考文献

javax.mail.internet (Java(TM) EE 8 Specification APIs)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2