Javamail解析电子邮件主体具有7位内容传输编码



我一直在实施一个功能来读取电子邮件文件。如果文件具有附件,请返回附件名称。现在,我使用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()));
        }
    }
}

它可以正常工作,但是当电子邮件文件具有7BIT CONTENT-TRANSFER编码时,BodyPart.getFileName()MAKE NULLPOInterException。当电子邮件是7位内容传输编码时,有什么方法可以获取附件名称?对不起,我的英语不好。

编辑:这是有关我的测试文件的一些信息。(X-Mailer:Emacs 21.3/Mule 5.0(Sakaki)上的MEW 2.2版);(mime-version:1.0):( content-type:多部分/混合);(content-transfer-insoding:7bit)

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

使用会话,因为这可能是唯一无效的东西。

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

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

您无需解码文件名。

您可以以这种方式处理"没有名称"的情况:

字符串fileName =(bodypart.getFilename()== null)?" your_filename" :bodypart.getFilename();

相关内容

  • 没有找到相关文章

最新更新