Javamail使用7BIT内容传输编码解析电子邮件正文

时间:2014-02-06 09:00:55

标签: java email javamail attachment

我一直在实现阅读电子邮件文件的功能。如果文件有附件,请返回附件名称。 现在我正在使用Javamail库来解析电子邮件文件。这是我的代码。

    public static void parse(File file) throws Exception {
    InputStream source = new FileInputStream(file);
    MimeMessage message = new MimeMessage(null, source);
    Multipart multipart = (Multipart) message.getContent();
    for (int i = 0; i < multipart.getCount(); i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);
        String disposition = bodyPart.getDisposition();
        if (disposition != null
                && disposition.equalsIgnoreCase(Part.ATTACHMENT)) {
            System.out.println("FileName:"
                    + MimeUtility.decodeText(bodyPart.getFileName()));
        }
    }
}

它工作正常但当电子邮件文件具有7位Content-Transfer-Encoding时,bodyPart.getFileName()会产生NullPointerException。 当电子邮件是7bit Content-Transfer-Encoding时,有没有办法获得附件名称? 抱歉我的英语不好。

已编辑:以下是有关我的测试文件的一些信息。 (X-Mailer:Emacs 21.3 / Mule 5.0(SAKAKI)上的Mew 2.2版); (Mime版本:1.0):(内容类型:Multipart / Mixed); (内容传输编码:7位)

3 个答案:

答案 0 :(得分:0)

如果我的答案不起作用,请显示堆栈跟踪。

使用Session,因为这可能是唯一无效的。

Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
MimeMessage message = new MimeMessage(session, source);

答案 1 :(得分:0)

并非所有附件都有文件名。你需要处理这种情况。

而你don't need to decode the filename

答案 2 :(得分:0)

您可以通过这种方式处理“没有名字的附件”的情况:

String fileName =(bodyPart.getFileName()== null)? “your_filename”                         :bodyPart.getFileName();