我在解析MIME邮件时遇到了麻烦。我有一些PCAP文件包含我想要的特定附件的数据包。我可以从邮件中检索完整附件,邮件只有一个附件(内容类型:应用程序/八位字节流)而不是更多。当我尝试获得多个附件时,每个附件只能获得约70%的附件。它是Java Mail解析器的问题还是我做错了什么?
public ArrayList<Attachment> parseMessage() {
ArrayList<Attachment> attachments = new ArrayList<>();
try {
Session s = Session.getDefaultInstance(new Properties());
InputStream is = new ByteArrayInputStream(parts.getBytes());
MimeMessage message = new MimeMessage(s, is);
if(!message.getContentType().contains("multipart"))
return null;
Multipart multipart = (Multipart) message.getContent();
for (int j = 0; j < multipart.getCount(); j++) {
Part part = multipart.getBodyPart(j);
if (part.getDisposition() != null && part.getDisposition().equals("attachment") && part.getContentType().contains("application")) {
attachments.add(new Attachment(this.searchForContent(part),part.getFileName()));
}
}
// }
} catch (MessagingException ex) {
} catch (IOException ex) {
}
return attachments;
}
public byte[] searchForContent(Part part) {
InputStream is = null;
ArrayList<Byte> list = new ArrayList<>();
try {
is = part.getInputStream();
int character = 0;
while ((character = is.read()) != -1) {
list.add((byte) character);
}
} catch (Exception ex) {
}
byte[] bytes = new byte[list.size()];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = list.get(i);
}
return bytes;
}
答案 0 :(得分:0)
字节列表?佑!那效率很低!如果您确实需要字节数组中的数据,请尝试将其复制到ByteArrayOutputStream。
无论如何,我无法从您发布的代码中看出您是如何检测到只有70%的内容可用。 parts.getBytes()是否可能没有返回所有数据?你怎么知道的?你是否有一个完整的测试程序以及一个显示问题的测试消息文件?
您使用的是什么版本的JavaMail?