繁体   English   中英

具有7BIT内容传输编码的Javamail解析电子邮件正文

[英]Javamail Parsing Email Body with 7BIT Content-Transfer-Encoding

我一直在执行一项功能,以读取电子邮件文件。 如果文件具有附件,请返回附件名称。 现在,我正在使用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。 当电子邮件为7位Content-Transfer-Encoding时,有什么方法可以获取附件名称? 对不起,我的英语不好。

编辑:这是关于我的测试文件的一些信息。 (X-Mailer:Emacs 21.3 / Mule 5.0(SAKAKI)上的Mew 2.2版); (MIME版本:1.0):(内容类型:多部分/混合); (内容传输编码:7位)

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

使用Session ,因为唯一可能是null。

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

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

而且您不需要解码文件名

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

字符串fileName =(bodyPart.getFileName()== null) “您的文件名”:bodyPart.getFileName();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM