无法使用Java Mail获取完整的附件内容

时间:2014-04-07 21:42:50

标签: java email javamail mime-types email-attachments

我在解析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;
}   

1 个答案:

答案 0 :(得分:0)

字节列表?佑!那效率很低!如果您确实需要字节数组中的数据,请尝试将其复制到ByteArrayOutputStream。

无论如何,我无法从您发布的代码中看出您是如何检测到只有70%的内容可用。 parts.getBytes()是否可能没有返回所有数据?你怎么知道的?你是否有一个完整的测试程序以及一个显示问题的测试消息文件?

您使用的是什么版本的JavaMail?