欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot mail中文附件亂碼的解決方法

 更新時間:2017年09月26日 16:42:41   作者:小柒  
本篇文章主要介紹了SpringBoot mail中文附件亂碼的解決方法,非常具有實用價值,需要的朋友可以參考下

前一段時間做過一個郵件發(fā)送的服務,以前大體都測試過,文本、圖片、附件都是沒有問題的,可有同事反應發(fā)送的附件名稱有中文亂碼,類似如下截圖展示:

咋一看不像亂碼,抱著試試看的態(tài)度,為MimeMessageHelper硬性加了編碼:

helper.addAttachment(MimeUtility.encodeText(fileName), file);

并且對文件名稱加了轉(zhuǎn)碼:

MimeUtility.encodeText(attachmentFilename)

但是,如果你跟進源碼會發(fā)現(xiàn)spring已經(jīng)為你做了轉(zhuǎn)碼工作,所以這個問題不存在的。

繼續(xù)跟進MimeBodyPart類,發(fā)現(xiàn)setFileName方法中有個ParameterList類,點擊繼續(xù)跟進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));
        }

上面這段代碼的邏輯,大家應該可以很清晰的理解了吧,大家可以發(fā)現(xiàn)如果value.length() > 60 并且 splitLongParameters?哎,問題來了,splitLongParameters到底是個什么值,我們查找splitLongParameters,發(fā)現(xiàn)了其在類開頭已經(jīng)定義了

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

大致意思就是,編碼后的文件名長度如果大于60并且splitLongParameters的值為true,encodeParameters的值為true,文件名就會被截取,想想編碼后的值被截取是什么樣子?也只能是文章開頭截圖的顯示了。

最終的解決方案就是,在發(fā)送的時候初始化splitLongParameters為false不截?。?/p>

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java線程池Executor用法詳解

    Java線程池Executor用法詳解

    本文主要為大家詳細介紹了Java線程池Executor的用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 使用java8 API遍歷過濾文件目錄及子目錄和隱藏文件示例詳解

    使用java8 API遍歷過濾文件目錄及子目錄和隱藏文件示例詳解

    這篇文章主要介紹了使用java8API遍歷過濾文件目錄及子目錄及隱藏文件示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 基于Springboot+Mybatis對數(shù)據(jù)訪問層進行單元測試的方式分享

    基于Springboot+Mybatis對數(shù)據(jù)訪問層進行單元測試的方式分享

    本文將介紹一種快高效、可復用的解決測試方案——對數(shù)據(jù)訪問層做單元測試,文章通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • SpringCloud應用idea實現(xiàn)可相互調(diào)用的多模塊程序詳解

    SpringCloud應用idea實現(xiàn)可相互調(diào)用的多模塊程序詳解

    IDEA 全稱 IntelliJ IDEA,是java編程語言的集成開發(fā)環(huán)境。IntelliJ在業(yè)界被公認為最好的Java開發(fā)工具,尤其在智能代碼助手、代碼自動提示、重構(gòu)、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創(chuàng)新的GUI設計等方面的功能可以說是超常的
    2022-07-07
  • java實現(xiàn)計算地理坐標之間的距離

    java實現(xiàn)計算地理坐標之間的距離

    java實現(xiàn)計算地理坐標之間的距離,主要是通過計算兩經(jīng)緯度點之間的距離來實現(xiàn),有需要的小伙伴參考下吧
    2015-03-03
  • SpringCloud 如何提取公共配置

    SpringCloud 如何提取公共配置

    這篇文章主要介紹了SpringCloud 提取公共配置的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中Validated、Valid 、Validator區(qū)別詳解

    Java中Validated、Valid 、Validator區(qū)別詳解

    本文主要介紹了Java中Validated、Valid 、Validator區(qū)別,有時候面試的時候會被問到,他們的區(qū)別你知道幾個,本文就來詳細的介紹一下
    2021-08-08
  • Java深入數(shù)據(jù)結(jié)構(gòu)理解掌握抽象類與接口

    Java深入數(shù)據(jù)結(jié)構(gòu)理解掌握抽象類與接口

    在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-05-05
  • Java java.lang.InstantiationException異常案例詳解

    Java java.lang.InstantiationException異常案例詳解

    這篇文章主要介紹了Java java.lang.InstantiationException異常案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java.net.SocketTimeoutException: Read timed out異常的解決

    java.net.SocketTimeoutException: Read timed o

    本文主要介紹了java.net.SocketTimeoutException: Read timed out異常的解決,可能是因為網(wǎng)絡延遲、服務器響應慢或連接不穩(wěn)定等原因造成的,下面就一起來介紹一下,感興趣的可以了解一下
    2024-05-05

最新評論