gpt4 book ai didi

java - 使用 Java 如何在使用 javamail 阅读 pop3 电子邮件时从中删除 html?

转载 作者:行者123 更新时间:2023-11-29 03:43:26 25 4
gpt4 key购买 nike

我需要让用户向一个地址提交一封电子邮件,该地址将用于填充我的数据库中的实体。我的程序会定期检查收件箱中是否有新邮件,当它发现新邮件时,我需要使用主题、发件人、发送日期、附件和正文来填充数据库实体。我已经能够获取所有字段,但是当它包含 html 时我遇到了问题。我只需要存储电子邮件的文本。我想去掉正文中的所有标签、签名等。除了正则表达式之外,还有更好的方法吗?

这是我用来获取正文的函数。我的问题在于 mimetype 在函数的最后一部分遇到“multipart/*”情况。该函数返回 html 消息。除正则表达式外,我该怎么做才能去除该部分中的标签?

    /**
* Return the primary text content of the message.
*/
private String getText(Part p) throws MessagingException, IOException {
if (p.isMimeType("text/*")) {
String s = (String)p.getContent();
textIsHtml = p.isMimeType("text/html");
return s;
}

if (p.isMimeType("multipart/alternative")) {
// prefer html text over plain text
Multipart mp = (Multipart)p.getContent();
String text = null;
for (int i = 0; i < mp.getCount(); i++) {
Part bp = mp.getBodyPart(i);
if (bp.isMimeType("text/plain")) {
if (text == null){
text = getText(bp);
}
continue;
}
else if (bp.isMimeType("text/html")) {
String s = getText(bp);
if (s != null){
return s;
}
}
else {
return getText(bp);
}
}
return text;
}
else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart)p.getContent();
for (int i = 0; i < mp.getCount(); i++) {
String s = getText(mp.getBodyPart(i));
if (s != null)
return s;
}
}
return null;
}

非常感谢任何帮助。

我一直在尝试以下操作,但它导致了我在下面评论过的西类牙语 á 问题。

 else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart)p.getContent();
for (int i = 0; i < mp.getCount(); i++) {
String s = getText(mp.getBodyPart(i));
Document doc = Jsoup.parse(s);
String retText = doc.text();
retText.replaceAll("[0%d0%a]", "<br />");
if (retText != null)
return retText;
}
}

我也试过 [\r\n] 和 [\n] 作为我的正则表达式。

最佳答案

您可以使用一些 HTML 解析器,例如 jsoup遍历 HTML 代码并仅提取所需的文本。

看看:

关于java - 使用 Java 如何在使用 javamail 阅读 pop3 电子邮件时从中删除 html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12109998/

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