Download attachments using Java Mail

前端 未结 4 1656
自闭症患者
自闭症患者 2020-11-28 03:36

Now that I`ve downloaded all the messages, and store them to

Message[] temp;

How do I get the list of attachments for each of those message

4条回答
  •  囚心锁ツ
    2020-11-28 03:49

    Question is very old, but maybe it will help someone. I would like to expand David Rabinowitz`s answer.

    if(!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition()))
    

    should not return all atachments as you expect, because you can have mail where mixed part is without defined disposition.

       ----boundary_328630_1e15ac03-e817-4763-af99-d4b23cfdb600
    Content-Type: application/octet-stream;
        name="00000000009661222736_236225959_20130731-7.txt"
    Content-Transfer-Encoding: base64
    

    so in this case, you can also check for filename. Like this:

    if (!Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) && StringUtils.isBlank(part.getFileName())) {...}
    

    EDIT

    there is whole working code using condition descibed above.. Because each part can encapsulate another parts and attachment should be nested in, recursion is used to traverse through all parts

    public List getAttachments(Message message) throws Exception {
        Object content = message.getContent();
        if (content instanceof String)
            return null;        
    
        if (content instanceof Multipart) {
            Multipart multipart = (Multipart) content;
            List result = new ArrayList();
    
            for (int i = 0; i < multipart.getCount(); i++) {
                result.addAll(getAttachments(multipart.getBodyPart(i)));
            }
            return result;
    
        }
        return null;
    }
    
    private List getAttachments(BodyPart part) throws Exception {
        List result = new ArrayList();
        Object content = part.getContent();
        if (content instanceof InputStream || content instanceof String) {
            if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) || StringUtils.isNotBlank(part.getFileName())) {
                result.add(part.getInputStream());
                return result;
            } else {
                return new ArrayList();
            }
        }
    
        if (content instanceof Multipart) {
                Multipart multipart = (Multipart) content;
                for (int i = 0; i < multipart.getCount(); i++) {
                    BodyPart bodyPart = multipart.getBodyPart(i);
                    result.addAll(getAttachments(bodyPart));
                }
        }
        return result;
    }
    

提交回复
热议问题