'Caused by: com.sun.mail.util.FolderClosedIOException: null

I am using apache camel to monitor the incoming email to the inbox. After receiving the email the content (attachment) is being consumed. To consume the attachment in the email I used the code ilusterated on the apache camel homepage

https://camel.apache.org/components/3.16.x/mail-component.html

For some reason I am getting the following error:

Caused by: com.sun.mail.util.FolderClosedIOException: null

Code

@Component
public class EmailPollingRoute extends RouteBuilder {

    static final Logger LOGGER = LoggerFactory.getLogger(EmailPollingRoute.class);

    @Override
    public void configure() throws Exception {

        //@formatter:off
        from("direct:processPollingEmail")
        .routeId("routeId_EmailPollingRoute")
        .pollEnrich("imaps://imap.web.de?username=XXXX&password=XXXXX&unseen=true&subject=FK100 - daily")
                .process(new Processor() {
                    @Override
                    public void process(Exchange exchange) throws Exception {
                        AttachmentMessage attachmentMessage = exchange.getMessage(AttachmentMessage.class);
                        Map<String, DataHandler> attachments = attachmentMessage.getAttachments();
                        if (attachments != null && attachments.size() > 0) {
                            for (String name : attachments.keySet()) {
                                DataHandler dh = attachments.get(name);
                                
                                // get the file name
                                String filename = dh.getName();
                                if(filename != null && filename.endsWith(".csv")){
                                    byte[] data = exchange.getContext().getTypeConverter()
                                      .convertTo(byte[].class, dh.getInputStream());
                                    LOGGER.info("data: " + data);
                                    
                                    // write the data to a file
                                    FileOutputStream out = new FileOutputStream(filename);
                                    out.write(data);
                                    out.flush();
                                    out.close();    
                                }
                            }
                        }                       
                }   
                })
            
            .to("log:newmail")
            ;
        //@formatter:on
    }
}

Error:

com.sun.mail.util.FolderClosedIOException: null
    at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:90)
    at org.apache.camel.component.mail.DelegatingDataSource.getInputStream(DelegatingDataSource.java:46)
    at javax.activation.DataHandler.getInputStream(DataHandler.java:221)
    at com.EmailPollingRoute$1.process(EmailPollingRoute.java:51)
    at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:469)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:187)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
    at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398)
    at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
    at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41)
    at org.apache.camel.component.quartz.CamelJob.execute(CamelJob.java:69)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
2022-04-15 22:13:02 [DefaultQuartzScheduler-camel-1_Worker-1] WARN  o.a.c.component.mail.MailConsumer - Exchange failed, so rolling back message status: Exchange[328303AF174DCB4-0000000000000000]
com.sun.mail.util.FolderClosedIOException: null
    at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:90)
    at org.apache.camel.component.mail.DelegatingDataSource.getInputStream(DelegatingDataSource.java:46)
    at javax.activation.DataHandler.getInputStream(DataHandler.java:221)
    at com.EmailPollingRoute$1.process(EmailPollingRoute.java:51)
    at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:469)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:187)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
    at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398)
    at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
    at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41)
    at org.apache.camel.component.quartz.CamelJob.execute(CamelJob.java:69)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
2022-04-15 22:13:02 [DefaultQuartzScheduler-camel-1_Worker-1] ERROR o.a.camel.component.quartz.CamelJob - Error processing exchange. Exchange[328303AF174DCB4-0000000000000000]. Caused by: [org.quartz.JobExecutionException - com.sun.mail.util.FolderClosedIOException]
2022-04-15 22:13:02 [DefaultQuartzScheduler-camel-1_Worker-1] INFO  org.quartz.core.JobRunShell - Job Camel_camel-1.emailTimer threw a JobExecutionException: 
org.quartz.JobExecutionException: com.sun.mail.util.FolderClosedIOException
    at org.apache.camel.component.quartz.CamelJob.execute(CamelJob.java:80)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: com.sun.mail.util.FolderClosedIOException: null
    at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:90)
    at org.apache.camel.component.mail.DelegatingDataSource.getInputStream(DelegatingDataSource.java:46)
    at javax.activation.DataHandler.getInputStream(DataHandler.java:221)
    at com.EmailPollingRoute$1.process(EmailPollingRoute.java:51)
    at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:65)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:469)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:187)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
    at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398)
    at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
    at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41)
    at org.apache.camel.component.quartz.CamelJob.execute(CamelJob.java:69)
    ... 2 common frames omitted


Solution 1:[1]

After adding the closeFolder and disconnect options I could ride of the error

      .pollEnrich("imaps://imap.web.de"
            + "?username=XXXXX&"
            + "password=XXXXX&"
            + "unseen=true&"
            + "closeFolder=false&"
            + "disconnect=false&"
            + "subject=FK100 - daily")

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 tree