gpt4 book ai didi

java - 使用 JavaMail 解析文本/html 数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:11 25 4
gpt4 key购买 nike

我编写了一个应用程序,在其中获取消息并检查其内容:

public void getInhoud(Message msg) throws IOException, Exception {
Object contt = msg.getContent();
...
if (contt instanceof String) {
handlePart((Part) msg);
}
...
}

public void handlePart(Part part)
throws MessagingException, IOException, Exception {

ByteArrayOutputStream out = new ByteArrayOutputStream();
String contentType = part.getContentType();
...
if ((contentType.length() >= 9)
&& (contentType.toLowerCase().substring(
0, 9).equals("text/html"))) {
part.writeTo(out);
String stringS = out.toString();
}
...
}

我删除了不必要的代码。此方法适用于从 Gmail、Hotmail 和 Outlook 桌面客户端发送的电子邮件,但不知何故无法处理从 Office 365 Web 客户端发送的电子邮件。对于所有其他客户端,内容类型将为“纯文本/文本”,但仅对于 Office 365 邮件,内容类型将为 text/html。它将 Part 的数据写入 ByteArrayOutputStream,然后将其转换为 String。这是可行的,至少 String 将包含该部分的内容。但它包含的 HTML 有点错误。

这是一个例子: http://pastebin.com/5mEYCHxD (发布到 Pastebin,它相当大)。

请注意几乎每行末尾都打印的 = 符号。这是我可以在代码中修复的问题还是应该在邮件客户端中的某个地方?

我考虑过循环遍历 HTML 的每一行,并在检查 = 不是 HTML 标记的一部分后将其删除。

非常感谢任何帮助,这已经困扰我几个星期了。

谢谢!

最佳答案

听起来就像 quoted printable encoding :

Lines of quoted-printable encoded data must not be longer than 76 characters. To satisfy this requirement without altering the encoded text, soft line breaks may be added as desired. A soft line break consists of an "=" at the end of an encoded line, and does not appear as a line break in the decoded text.

writeTo方法似乎也写入编码内容,看来你必须自己复制流。 getInputStream method被描述为返回解码后的InputStream。

关于java - 使用 JavaMail 解析文本/html 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066910/

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