gpt4 book ai didi

java - 使用 JavaMail 阅读电子邮件内容时出现编码问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:12 31 4
gpt4 key购买 nike

我正在使用 JavaMail 1.4.1(我已经升级到 1.4.5 版本但遇到了同样的问题)从电子邮件帐户中读取消息,但是我在内容编码方面遇到了问题:

POP3Message pop3message;
...
Object contentObject = pop3message.getContent();
...
String contentType = pop3message.getContentType();
String content = contentObject.toString();

有些消息可以正确阅读,但有些消息由于编码不合适而出现奇怪的字符。我意识到它不适用于特定的内容类型。

如果 contentType 是以下任何一个,它会很好地工作:

  • text/plain; charset=ISO-8859-1

  • text/plain;
    charset="iso-8859-1"

  • text/plain;
    charset="ISO-8859-1";
    format="flowed"

  • text/plain; charset=windows-1252

但如果是,则不会:

  • text/plain;
    charset="utf-8"

对于此 contentType(UTF-8 之一),如果我尝试获取编码 (pop3message.getEncoding()),我会得到

quoted-printable

对于后一种编码,我在调试器中获得了字符串值(与持久化对象后在数据库中看到的方式相同):

Ubicación (instead of 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

最佳答案

您如何检测这些消息是否包含“奇怪的字符”?你在某处显示数据吗?您用于显示数据的任何方法都可能无法正确处理 Unicode 字符。

第一步是确定问题是您输入了错误的字符,还是正确的字符显示不正确。您可以检查数据中每个字符的 Unicode 值(例如,在从 getContent 方法返回的字符串中)以确保每个字符都具有正确的 Unicode 值。如果是,则问题出在您用来显示字符的方法上。

关于java - 使用 JavaMail 阅读电子邮件内容时出现编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13385311/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com