您好,欢迎来到锐游网。
搜索
您的当前位置:首页javamail 收发邮件 乱码问题解决

javamail 收发邮件 乱码问题解决

来源:锐游网

最近在弄用javamail收发邮件,遇到一些问题,记录如下。

很多问题可以从oracle的FAQ解决:http://www.oracle.com/technetwork/java/faq-135477.html#fetch  。


1. 收邮件附件乱码。一般标题和正文的乱码都很好解决,但附件的乱码就很有问题。主要是在解码出错。

      这次遇到的编码方式有:

   1) 有GBK, GB2312, UTF-8等编码

   2) 使用B、或Q编码

         以上两点可以用一个java函数解决:MimeUtility.decodeText()

         我目前是这样,不像网上说的那样很多步骤处理。

   3) 同一个附件名字,分段编码,如:

       下面是一个附件名收到的编码:

        =?utf-8?B?5Lqn5ZOB55+l6K+G5Zyw5Zu+MjAxMjA377yI6KGM5Lia5Y+K546v5aKD77yJ?==?utf-8?Q?2.xls?=

        中文名是:产品知识地图201207(行业及环境)2.xls


        使用 MimeUtility.decodeText()上面附件解码后,得到字串:产品知识地图201207(行业及环境)=?utf-8?Q?2.xls?=
        再对后面的=?utf-8?Q?2.xls?= 解码,使用 MimeUtility.decodeText()得到字串:2.xls


       这就是分段编码,也就是:

                =?utf-8?B?5Lqn5ZOB55+l6K+G5Zyw5Zu+MjAxMjA377yI6KGM5Lia5Y+K546v5aKD77yJ?=    

                       对应    

              产品知识地图201207(行业及环境)



               =?utf-8?Q?2.xls?=     对应    2.xls


   

所以,针对上面的3种情况,写一个方法:


public String decodeMailString(String str) {

	try {
	    if (str == null) {
		return null;
	    }

	    StringBuilder sb = new StringBuilder();
	    String[] aStr;
	    while (true) {
		int pos = str.indexOf("=?");
		if ( pos > -1) {
		    str = MimeUtility.decodeText(str);
		    aStr = str.split("=\\?", 2);
		    sb.append(aStr[0]);
		    if (aStr.length > 1) {
			str = "=?" + aStr[1];
		    } else {
			 return sb.toString();
		    }
		}else{
		    return str;
		}

	    }
	   
	} catch (UnsupportedEncodingException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

	return null;
    }


目前工作良好。我这是按顺序解码的,如果前面的字串没有解就会出问题了。


2. 收取大附件很慢

javamail默认的fetchsize是16K,可以增大一点。
props.put("mail.imap.partialfetch", "true"); "true"或"false"这个也可以试试。


增加配置:

Properties props = new Properties();
props.put("mail.imap.partialfetch", "false");
props.put("mail.imap.fetchsize", "819200");
Session session = Session.getDefaultInstance(props, null);


   


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务