JavaMail 1.4.1 を使用して電子メール アカウントからメッセージを読んでいます (1.4.5 バージョンにアップグレードしましたが、同じ問題があります) が、コンテンツのエンコードに問題があります。
POP3Message pop3message;
...
Object contentObject = pop3message.getContent();
...
String contentType = pop3message.getContentType();
String content = contentObject.toString();
一部のメッセージは正しく読み取られますが、適切なエンコーディングが行われていないため、他のメッセージはおかしな文字になります。特定のコンテンツ タイプでは機能しないことに気付きました。
contentType が次のいずれかの場合にうまく機能します。
テキスト/プレーン; charset=ISO-8859-1
テキスト/プレーン;
charset="iso-8859-1"テキスト/プレーン;
charset="ISO-8859-1";
format="流れる"テキスト/プレーン; charset=windows-1252
ただし、次の場合はそうではありません。
- テキスト/プレーン;
charset="utf-8"
この contentType (UTF-8 one) のエンコーディング (pop3message.getEncoding()) を取得しようとすると、
引用された印刷可能
後者のエンコーディングでは、たとえば、デバッガーで String 値を取得します (オブジェクトを永続化した後にデータベースで確認するのと同じ方法で):
Ubicación (Ubicación の代わりに)
しかし、ブラウザのメール クライアントでメールを開くと、問題なく読むことができ、通常のメッセージ (添付ファイルなし、テキストのみ) であるため、メッセージは問題ないようです。
この問題を解決する方法について何か考えはありますか?
ありがとう。
更新 これは、jlordo によって与えられた関数 getUTF8Content() を試すために追加したコードです。
POP3Message pop3message = (POP3Message) message;
String uid = pop3folder.getUID(message);
//START JUST FOR TESTING PURPOSES
if(uid.trim().equals("1401")){
Object utfContent = pop3message.getContent();
System.out.println(utfContent.getClass().getName()); // it is of type String
//System.out.println(utfContent); // if not commmented it prints the content of one of the emails I'm having problems with.
System.out.println(pop3message.getEncoding()); //prints: quoted-printable
System.out.println(pop3message.getContentType()); //prints: text/plain; charset="utf-8"
String utfContentString = getUTF8Content(utfContent); // throws java.lang.ClassCastException: java.lang.String cannot be cast to javax.mail.util.SharedByteArrayInputStream
System.out.println(utfContentString);
}
//END TEST CODE