Javaから送信されるメールの添付ファイル名が文字化けする問題の対策

Javaから送信されるメールの添付ファイル名が文字化けしてしまう場合の対策方法。

問題は送信側だけでなく受信側にもよるようで、GmailYahoo! メールではファイル名が文字化けする場合でもお名前.com WebmailSparkでは正しく表示された。

環境

Play Framework 2.6.25
Play Mailer 6.0.1

参考

https://qiita.com/takeshinho/items/d371695f4ee10e282ce8
https://qiita.com/esgr_dxx/items/08ac2e5e0e2be99482f5
https://qiita.com/megasys1968/items/70ff848a6debeff35d56
https://qiita.com/hatanakaakihiro/items/41553bcb32459bd42656

調査してわかった内容

参考記事にも一部例があるが、javax.mail.internet.ParameterList.javaの中でパラメータが60文字以上であるかどうかによってエンコード内容を分割するかどうかの分岐が行われている。
ただし添付ファイルのファイル名はこの時点ですでにエンコードされており、(自分の環境の場合)分割もされている。
そのため二重にエンコード内容の分割が行われてしまうことにより正しく復元できなくなっていると思われる。

対策方法

エンコード内容を分割しないように設定を変更する。
添付ファイルを設定する際に自分では何も特別なエンコードなどは行わず、メール送信前に以下のシステムプロパティ設定を変更するだけで良い。

System.setProperty("mail.mime.splitlongparameters", "false");

その他の方法

その他の対策としては、添付ファイルのファイル名に日本語を使用しない、ファイル名の長さを全角13文字相当より短くするなどが考えられる。