まいど、
もりぞーです。
DOCOMOの携帯から日本語と半角英数字が混じった場合、
Subjectが面白いことに。
@原文
ドコモの携帯からSubjectに以下を記述
Baaaaあああああ.aaa な@かgjajd ajやねやたlthm..
@PCで受信したメールのソース(DOCOMOからPCへ送った)
Subject: Baaaa=?iso-2022-jp?B?GyRCJCIkIiQiJCIkIhsoQg==?=.aaa
=?iso-2022-jp?B?GyRCJEobKEI=?=@=?iso-2022-jp?B?GyRCJCsbKEI=?=gjajd
aj=?iso-2022-jp?B?GyRCJGQkTSRkJD8bKEI=?=lthm..
JavaMailで普通にgetSubjectを実行すると・・
Baaaa=?iso-2022-jp?B?GyRCJCIkIiQiJCIkIhsoQg==?=.aaa な@=?iso-2022-jp?B?GyRCJCsbKEI=?=gjajd aj=?iso-2022-jp?B?GyRCJGQkTSRkJD8bKEI=?=lthm..
わけがわかりません。
どうやら複数行あった場合、最後の行だけ正しく変換する模様。
至急どうにかするコードを書いてくれってことで、適当に書いてみた。
/**
* docomoSubjectDecoder
* DOCOMOから送信されるメールのSubject文字化けを元に戻す。
* @param String subject
* @return String newSubject
*/
public static String docomoSubjectDecoder(String nativeSubject){
//抽出用マッチングパターン
String ISO_2022_PATTERN = "\\Q=?iso-2022-jp?\\E(.*?)\\Q=?=\\E";
try{
//抽出作業
ArrayList codeList = new ArrayList();
Pattern pattern = Pattern.compile(ISO_2022_PATTERN,Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(nativeSubject);
while(matcher.find()){
codeList.add(matcher.group());
}
//抽出したものを置換
for(int i=0;i nativeSubject = nativeSubject.replaceAll("\\Q"+(String)codeList.get(i)+"\\E",MimeUtility.decodeWord((String)codeList.get(i)));
}
}catch (Exception e) {
//エラー
// TODO: handle exception
}
return nativeSubject;
}
@使い方(噛ませるだけ)
Message[] messages = folder.getMessages();
String subject = messages[i].getSubject();
String subjectAfter = docomoSubjectDecoder(messages[i].getSubject());
即席・・・。
とりあえず変換されてないのを抽出して
変換かけて戻してるだけ。
いいのかしら・・これで・・