java mail 讀取郵件亂碼問題

使用java mail讀取郵件,發(fā)現(xiàn)小部分郵件標(biāo)題出現(xiàn)亂碼。
(600438???點(diǎn)評
獲取標(biāo)題的代碼如下:

public String getSubject(MimeMessage msg) throws Exception {
        return msg.getSubject();
}

郵件客戶端顯示正常,不亂碼,正確的標(biāo)題是
(600438)點(diǎn)評

1.打印?的值是65533

2.跟蹤到最原始的Subject

String[] strMailSubject = msg.getHeader("subject");

打印出來如下(有些省略)

?utf-8?B?77yINjAwNDM477yJ54K56K+E7?=
 =?utf-8?B?7ya56ym5ZCI6aKE5pyf44CC?==

正確的標(biāo)題base64編碼結(jié)果如下

77yINjAwNDM477yJ54K56K+E77ya56ym5ZCI6aKE5pyf44CC

發(fā)現(xiàn)刪除
=?utf-8?B?
?=
\r
\n
空格
后跟原始base64編碼是一模一樣的。

解決方案:

/**
     * 獲得郵件主題 
     *      
     */
    public static String getSubject(MimeMessage msg) throws Exception {
        String subject=msg.getSubject();
        if(isHave65533(subject)) {//有亂碼
                try {
                    String[] strMailSubject = msg.getHeader("subject");
                    StringBuffer sb = new StringBuffer();
                    for (String str : strMailSubject) {
                        String str2=str.
                                replaceAll("=\\?utf-8\\?B\\?", "").
                                replaceAll("=\\?UTF-8\\?B\\?", "").
                                replaceAll("\\?utf-8\\?B\\?", "").
                                replaceAll("\\?=", "").
                                replaceAll("\n", "").
                                replaceAll("\r", "").
                                replaceAll(" ", "");
                        sb.append(str2);
                    }
                    subject=new String(Base64.getDecoder().decode(sb.toString()));
            } catch (Exception e) {
                logger.error(e.getMessage(),e);
                return subject;
            }
        }
        return subject;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容