SpringBoot開發案例之mail中文附件名字亂碼

最近在開發一個郵件發送多附件的微服務,使用的是org.springframework.mail.javamail.JavaMailSender;包下面的JavaMailSenderjava

可是發送出來的附件名字都是亂碼格式,以下:spring

 

 

跟進MimeBodyPart類,發現setFileName方法中有個ParameterList類,點擊繼續跟進ParameterList類,裏面的toString方法:微服務

if ((value.length() > 60) && (splitLongParameters)

                        && (encodeParameters)) {

                    int seg = 0;

                    name = name + "\*";

                    while (value.length() > 60) {

                        sb.addNV(name + seg, quote(value.substring(0, 60)));

                        value = value.substring(60);

                        ++seg;

                    }

                    if (value.length() > 0)

                        sb.addNV(name + seg, quote(value));

                } else {

                    sb.addNV(name, quote(value));

                }

 

上面這段代碼的邏輯,你們應該能夠很清晰的理解了吧,你們能夠發現若是value.length() > 60 而且 splitLongParameters?哎,問題來了,splitLongParameters究竟是個什麼值,咱們查找splitLongParameters,發現了其在類開頭已經定義了編碼

private static final boolean splitLongParameters = PropUtil .getBooleanSystemProperty("mail.mime.splitlongparameters", true);

大體意思就是,編碼後的文件名長度若是大於60而且splitLongParameters的值爲true,encodeParameters的值爲true,文件名就會被截取,想一想編碼後的值被截取是什麼樣子?也只能是文章開頭截圖的顯示了。spa

最終的解決方案就是,在發送的時候初始化splitLongParameters爲false不截取:code

static {

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

    }
相關文章
相關標籤/搜索