Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java mail迭代地从邮件中获取所有附件_Java_Email_Recursion_Email Attachments_Mime - Fatal编程技术网

使用java mail迭代地从邮件中获取所有附件

使用java mail迭代地从邮件中获取所有附件,java,email,recursion,email-attachments,mime,Java,Email,Recursion,Email Attachments,Mime,下面是我可以用来从邮件中获取所有附件的递归方法 public List<InputStream> getAttachments(Message message) throws Exception { Object content = message.getContent(); if (content instanceof String) return null; if (content inst

下面是我可以用来从邮件中获取所有附件的递归方法

public List<InputStream> getAttachments(Message message) throws Exception {
        Object content = message.getContent();
        if (content instanceof String)
            return null;        

        if (content instanceof Multipart) {
            Multipart multipart = (Multipart) content;
            List<InputStream> result = new ArrayList<InputStream>();

            for (int i = 0; i < multipart.getCount(); i++) {
                result.addAll(getAttachments(multipart.getBodyPart(i)));
            }
            return result;

        }
        return null;
    }

    private List<InputStream> getAttachments(BodyPart part) throws Exception {
        List<InputStream> result = new ArrayList<InputStream>();
        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<InputStream>();
            }
        }

        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;
}
public List getAttachments(消息)引发异常{
对象内容=message.getContent();
if(字符串的内容实例)
返回null;
if(多部分的内容实例){
多部分多部分=(多部分)内容;
列表结果=新建ArrayList();
对于(int i=0;i

如果不使用递归,这可以实现吗?因为递归会消耗堆栈中相当大的空间。

简短回答:是的,因为任何可以递归完成的事情也可以迭代完成。@Makoto在这种情况下,我如何完成它?因为我发现,如果它是迭代建模的,那么它将永无止境。你真的理解这段代码吗?如果是这样,在迭代场景中,哪一部分似乎很难实现?如果您已经尝试编写版本并遇到问题,您最好与我们分享您的代码和您遇到的确切困难。@PM77-1当然我理解代码。我在思考这种情况时遇到了困难,在这种情况下,模式多次迭代,就像身体内部的多部分一样