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