使用javamail仅提取电子邮件正文的文本部分,不包含html内容

时间:2015-07-14 17:07:50

标签: html javamail plaintext

在我的项目中,我需要使用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代码的txt,以及fontface<html>之类的标签,等等。

我看到this question,我发现他只检索文字内容,但我不能在那里发表评论,所以我必须发一个新问题,我发现我的代码和他的代码没有区别。他写道:

if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {


    DataHandler handler = bodyPart.getDataHandler();

    s1 = (String) bodyPart.getContent();`

关于DataHandler呢?但它没有在任何地方使用? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

首先,您要阅读此JavaMail FAQ条目,告诉您如何find the main message body。如上所述,在消息包含两者的情况下,它优先于纯文本正文的html正文。应该清楚如何扭转这种偏好。

但是,并非所有邮件都包含邮件正文的html和纯文本版本。如果你只得到html,你将不得不编写自己的代码来处理字符串并删除html标签,或者使用其他产品来处理html并删除标签。