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);