使用 javamail 只提取电子邮件正文的文本部分,没有 html 内容
Extract only text part of email body using javamail, without html content
在我的项目中,我需要使用 javamail 从 MS Exchange 邮箱读取邮件并将其内容保存在硬盘中。但是我发现即使我收到的最简单的电子邮件也保存了 html
内容,例如 head
body
等等,即使我只写了两个带格式的单词,没有图像,没有附件.但我只想要电子邮件的文本。
部分代码:
Object content = part.getContent();
if (content instanceof InputStream || content instanceof String) {
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) ||
StringUtils.isNotBlank(part.getFileName())) {
String messageBody = part.getContent().toString();
....(write this string to files)
}
}
我可以写:
Hello world.
然后我得到一个包含所有 html 代码、fontface
和 <html>
等标签的 txt。
我看到this question,我发现他只检索文本内容,但我不能在那里发表评论,所以我必须post一个新问题,我看不出我的代码和他的代码有什么区别。他写道:
if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
DataHandler handler = bodyPart.getDataHandler();
s1 = (String) bodyPart.getContent();`
那是关于 DataHandler
的吗?但它没有在任何地方使用?
有人可以帮忙吗?
首先,您需要阅读这个 JavaMail FAQ 条目,它告诉您如何 find the main message body。如所写,在消息包含两者的情况下,它更喜欢 html 正文而不是纯文本正文。应该清楚如何扭转这种偏好。
但是,并非所有邮件都包含 html 和邮件正文的纯文本版本。如果你只得到 html,你将不得不编写自己的代码来处理字符串并删除 html 标签,或者使用其他产品来处理 html 并删除标签。
在我的项目中,我需要使用 javamail 从 MS Exchange 邮箱读取邮件并将其内容保存在硬盘中。但是我发现即使我收到的最简单的电子邮件也保存了 html
内容,例如 head
body
等等,即使我只写了两个带格式的单词,没有图像,没有附件.但我只想要电子邮件的文本。
部分代码:
Object content = part.getContent();
if (content instanceof InputStream || content instanceof String) {
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) ||
StringUtils.isNotBlank(part.getFileName())) {
String messageBody = part.getContent().toString();
....(write this string to files)
}
}
我可以写:
Hello world.
然后我得到一个包含所有 html 代码、fontface
和 <html>
等标签的 txt。
我看到this question,我发现他只检索文本内容,但我不能在那里发表评论,所以我必须post一个新问题,我看不出我的代码和他的代码有什么区别。他写道:
if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
DataHandler handler = bodyPart.getDataHandler();
s1 = (String) bodyPart.getContent();`
那是关于 DataHandler
的吗?但它没有在任何地方使用?
有人可以帮忙吗?
首先,您需要阅读这个 JavaMail FAQ 条目,它告诉您如何 find the main message body。如所写,在消息包含两者的情况下,它更喜欢 html 正文而不是纯文本正文。应该清楚如何扭转这种偏好。
但是,并非所有邮件都包含 html 和邮件正文的纯文本版本。如果你只得到 html,你将不得不编写自己的代码来处理字符串并删除 html 标签,或者使用其他产品来处理 html 并删除标签。