Javaから送信されるメールの添付ファイル名が文字化けする問題の対策
Javaから送信されるメールの添付ファイル名が文字化けしてしまう場合の対策方法。
問題は送信側だけでなく受信側にもよるようで、Gmail
とYahoo! メール
ではファイル名が文字化けする場合でもお名前.com Webmail
やSpark
では正しく表示された。
環境
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文字相当より短くするなどが考えられる。