[英]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.