使用 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 并删除标签。