【问题标题】:Cannot get full attachment content using Java Mail无法使用 Java Mail 获取完整的附件内容
【发布时间】:2014-04-07 21:42:50
【问题描述】:

我在解析 MIME 消息时遇到问题。我有一些 PCAP 文件,其中包含我想要的特定附件的数据包。我可以从只有一个附件(内容类型:应用程序/八位字节流)的邮件中检索完整的附件。当我尝试获取多个附件时,我只能从每个附件中获取大约 70%。是 Java 邮件解析器有问题还是我做错了什么?

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;
}   

【问题讨论】:

标签: java email jakarta-mail mime-types email-attachments


【解决方案1】:

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

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

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

【讨论】:

  • 我使用的是 1.5.1 版本。我发现字节列表很有用,因为我不知道要读取的字节长度。我没有编写任何测试,但是我从 pcap 获得了整个 TCP 会话,所以我可以看到整个 Base64 编码的附件在尝试使用 Java Mail 解析它之前都没有问题。 70% 只是猜测。确切地说,我从 512 000 个字节中得到 491048 个字节,从 786432 个字节中得到 747519 个字节,这两种情况下都是 95%。 (抱歉之前的猜测)无论如何,在这两种情况下,损失百分比都是相同的。
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
相关资源
最近更新 更多