美文网首页
java mail 读取邮件乱码问题

java mail 读取邮件乱码问题

作者: icecooly | 来源:发表于2019-04-20 12:27 被阅读0次

    使用java mail读取邮件,发现小部分邮件标题出现乱码。
    (600438���点评
    获取标题的代码如下:

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

    邮件客户端显示正常,不乱码,正确的标题是
    (600438)点评

    1.打印�的值是65533

    2.跟踪到最原始的Subject

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

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

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

    正确的标题base64编码结果如下

    77yINjAwNDM477yJ54K56K+E77ya56ym5ZCI6aKE5pyf44CC
    

    发现删除
    =?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;
        }
    

    相关文章

      网友评论

          本文标题:java mail 读取邮件乱码问题

          本文链接:https://www.haomeiwen.com/subject/dqmkgqtx.html