javamail收取邮件,主题解码

		String subject=msg.getHeader("subject")!=null?msg.getHeader("subject")[0]:"";
		if(MimeUtility.decodeText(subject).indexOf("��")!=-1){
			if(subject.indexOf("=?")!=-1&&subject.indexOf("?=")!=-1){
				//1,多行解码时 偶尔出现无法解码的情况 原因未知
				//2,单行解码时utf-8解码汉字会出现把汉字编码截断的情况,所以多行合并解码
				//3,ISO-2022-JP日文 多行合并时除了第一行,后面的都不解析,原因未知
				//4,换行有的时候没空格,有的时候有一个空格 所以要统一一下
				subject=subject.replaceAll("\\?=\\\r\\\n =\\?", "\\?=\\\r\\\n=\\?").replaceAll("\\?=\\\r\\\n\\\t=\\?", "\\?=\\\r\\\n=\\?");
				String[] strArr=subject.split("\\?=\\\r\\\n=\\?");
				if(strArr.length>1){
					String[] subArr=strArr[0].split("\\?");
					String encoding=(subArr[1]+"?"+subArr[2]+"?").toUpperCase();
					String subSubject=strArr[0];
					if("ISO-2022-JP?".equals(encoding.substring(0, encoding.length()-2))){
						encoding="";
					}
					subject="";
					for (int i=1;i<strArr.length;i++) {
						subArr=strArr[i].split("\\?");
						String tempEncoding=(subArr[0]+"?"+subArr[1]+"?").toUpperCase();
						if(encoding.equals(tempEncoding)){
							subSubject+=strArr[i].substring(tempEncoding.length(), strArr[i].length());
						}else{
							if("ISO-2022-JP?".equals(tempEncoding.substring(0, tempEncoding.length()-2))){
								if(!subSubject.equals("")){
									subject+=MimeUtility.decodeText(subSubject+"?=");
									subSubject="";
								}
								subject+=MimeUtility.decodeText("=?"+strArr[i]+(strArr[i].endsWith("?=")?"":"?="));
								encoding="";
							}else{
								encoding=tempEncoding;
								subject+=MimeUtility.decodeText(subSubject+"?=");
								subSubject="=?"+strArr[i];
							}
						}
					}
					if(subject.equals("")){
						subject=MimeUtility.decodeText(subSubject);
					}else{
						subject+=MimeUtility.decodeText(subSubject);
					}
				}else if(strArr.length==1){
					subject=MimeUtility.decodeText(subject);
				}
			}
		}else{
			subject=MimeUtility.decodeText(subject);
		}
		email.setSubject(subject);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值