我一直在实现阅读电子邮件文件的功能。如果文件有附件,请返回附件名称。 现在我正在使用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位)
答案 0 :(得分:0)
如果我的答案不起作用,请显示堆栈跟踪。
使用Session,因为这可能是唯一无效的。
Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
MimeMessage message = new MimeMessage(session, source);
答案 1 :(得分:0)
并非所有附件都有文件名。你需要处理这种情况。
答案 2 :(得分:0)
您可以通过这种方式处理“没有名字的附件”的情况:
String fileName =(bodyPart.getFileName()== null)? “your_filename” :bodyPart.getFileName();