Hi Claus, Sorry for the reply in delay.
I moved back to 2.5.0 and revised code following your advice. still got following exceptions: processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: AAA:closing folder processCommit:Error occurred during flagging message as DELETED/SEEN:javax.mail.FolderClosedException 2011-09-16 13:59:33,359 [Camel Thread 35 - seda://email_process] ERROR seda.SedaConsumer - Error processing exchange. Exchange[Message: PHBvc3RtYXN0ZXJAUG9sdm9idi5ubD4gICBqYXZheC5tYWlsLmludGVybmV0Lk1pbWVNdWx0aXBhcnRANjI2OGNhNzE=]. Caused by: [javax.mail.FolderClosedException - null] javax.mail.FolderClosedException at com.sun.mail.imap.IMAPMessage.getProtocol(IMAPMessage.java:133) at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:843) at javax.mail.Message.setFlag(Message.java:565) at org.apache.camel.component.mail.MailConsumer.processCommit(MailConsumer.java:281) at org.apache.camel.component.mail.MailConsumer$1.onComplete(MailConsumer.java:176) at org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:55) at org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:172) at org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:121) at org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36) at org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:106) at org.apache.camel.processor.DefaultChannel$1.done(DefaultChannel.java:262) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:330) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:256) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:169) at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:111) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: AAA:closing folder processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: 2011-09-16 13:59:40,535 [http-80-5] ERROR [localhost].[/] - [CompressingFilter/1.7] Error while flushing buffer ClientAbortException: java.net.SocketException: Broken pipe at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434) at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309) at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:288) at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98) at com.planetj.servlet.filter.compression.StatsOutputStream.flush(StatsOutputStream.java:64) at java.io.FilterOutputStream.flush(FilterOutputStream.java:123) at com.planetj.servlet.filter.compression.StatsOutputStream.flush(StatsOutputStream.java:64) at com.planetj.servlet.filter.compression.ThresholdOutputStream.flush(ThresholdOutputStream.java:110) at com.planetj.servlet.filter.compression.CompressingServletOutputStream.flush(CompressingServletOutputStream.java:79) at com.planetj.servlet.filter.compression.CompressingHttpServletResponse.flushBuffer(CompressingHttpServletResponse.java:209) at com.planetj.servlet.filter.compression.CompressingServletOutputStream.close(CompressingServletOutputStream.java:86) at com.planetj.servlet.filter.compression.CompressingHttpServletResponse.close(CompressingHttpServletResponse.java:277) at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:284) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:662) Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:740) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349) at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764) at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:127) at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:573) at org.apache.coyote.Response.doWrite(Response.java:560) at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) ... 25 more AAA:closing folder AAA:closing folder AAA:closing folder processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: AAA:closing folder AAA:closing folder AAA:closing folder AAA:closing folder processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: AAA:closing folder processCommit:Error occurred during flagging message as DELETED/SEEN:javax.mail.FolderClosedException 2011-09-16 14:00:10,591 [Camel Thread 35 - seda://email_process] ERROR seda.SedaConsumer - Error processing exchange. Exchange[Message: TWFpbCBEZWxpdmVyeSBTdWJzeXN0ZW0gPE1BSUxFUi1EQUVNT05AYnV5ZXJzZWFyY2gub3JnPiAgIFRoZSBvcmlnaW5hbCBtZXNzYWdlIHdhcyByZWNlaXZlZCBhdCBGcmksIDE2IFNlcCAyMDExIDEzOjUxOjQzICswODAwDQpmcm9tIFsyMDIuMTM2LjYyLjI0M10NCg0KICAgLS0tLS0gVGhlIGZvbGxvd2luZyBhZGRyZXNzZXMgaGFkIHBlcm1hbmVudCBmYXRhbCBlcnJvcnMgLS0tLS0NCjxpbmZvQGNjYy5hZT4NCiAgICAocmVhc29uOiA1NTQgU2VydmljZSB1bmF2YWlsYWJsZTsgQ2xpZW50IGhvc3QgW2J1eWVyc2VhcmNoLm9yZ10gYmxvY2tlZCB1c2luZyBCYXJyYWN1ZGEgUmVwdXRhdGlvbjsgaHR0cDovL3d3dy5iYXJyYWN1ZGFuZXR3b3Jrcy5jb20vcmVwdXRhdGlvbi8/cj0xJmlwPTIxOS4xNDcuNy40MykNCg0KICAgLS0tLS0gVHJhbnNjcmlwdCBvZiBzZXNzaW9uIGZvbGxvd3MgLS0tLS0NCjQ1MSA0LjQuMSByZXBseTogcmVhZCBlcnJvciBmcm9tIG1haWxob3N0LmNjYy5hZS4NCjQ1MSA0LjQuMSByZXBseTogcmVhZCBlcnJvciBmcm9tIG1haWxob3N0bXNmLmNjYy5hZS4NCi4uLiB3aGlsZSB0YWxraW5nIHRvIG1haWxob3N0ZHhiLmNjYy5hZS46DQo+Pj4gREFUQQ0KPDw8IDU1NCBTZXJ2aWNlIHVuYXZhaWxhYmxlOyBDbGllbnQgaG9zdCBbYnV5ZXJzZWFyY2gub3JnXSBibG9ja2VkIHVzaW5nIEJhcnJhY3VkYSBSZXB1dGF0aW9uOyBodHRwOi8vd3d3LmJhcnJhY3VkYW5ldHdvcmtzLmNvbS9yZXB1dGF0aW9u... [Body clipped after 1000 chars, total length is 1144]]. Caused by: [javax.mail.FolderClosedException - null] javax.mail.FolderClosedException at com.sun.mail.imap.IMAPMessage.getProtocol(IMAPMessage.java:133) at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:843) at javax.mail.Message.setFlag(Message.java:565) at org.apache.camel.component.mail.MailConsumer.processCommit(MailConsumer.java:281) at org.apache.camel.component.mail.MailConsumer$1.onComplete(MailConsumer.java:176) at org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:55) at org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:172) at org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:121) at org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36) at org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:106) at org.apache.camel.processor.DefaultChannel$1.done(DefaultChannel.java:262) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:330) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:256) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:169) at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:111) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) AAA:closing folder AAA:closing folder AAA:closing folder AAA:closing folder AAA:closing folder AAA:closing folder AAA:closing folder AAA:closing folder processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: AAA:closing folder processCommit:Error occurred during flagging message as DELETED/SEEN:javax.mail.FolderClosedException 2011-09-16 14:00:27,926 [Camel Thread 35 - seda://email_process] ERROR seda.SedaConsumer - Error processing exchange. Exchange[Message: TWFpbCBEZWxpdmVyeSBTdWJzeXN0ZW0gPE1BSUxFUi1EQUVNT05AaXBlYy5jbj4gICBUaGUgb3JpZ2luYWwgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYXQgRnJpLCAxNiBTZXAgMjAxMSAxMzo1OTo1MyArMDgwMA0KZnJvbSBbMjAyLjEzNi42Mi4yNDNdDQoNCiAgIC0tLS0tIFRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzIGhhZCBwZXJtYW5lbnQgZmF0YWwgZXJyb3JzIC0tLS0tDQo8aW5mb0BzZWRlbnRyaWtvLmNvbS50cj4NCiAgICAocmVhc29uOiA1NTQtbTFwaXNtdHAwMS0wMzIucHJvZC5tZXNhMS5zZWN1cmVzZXJ2ZXIubmV0KQ0KDQogICAtLS0tLSBUcmFuc2NyaXB0IG9mIHNlc3Npb24gZm9sbG93cyAtLS0tLQ0KLi4uIHdoaWxlIHRhbGtpbmcgdG8gc210cC5zZWN1cmVzZXJ2ZXIubmV0LjoNCjw8PCA1NTQtcDNwaXNtdHAwMS0wMzMucHJvZC5waHgzLnNlY3VyZXNlcnZlci5uZXQNCjw8PCA1NTQgWW91ciBhY2Nlc3MgdG8gdGhpcyBtYWlsIHN5c3RlbSBoYXMgYmVlbiByZWplY3RlZCBkdWUgdG8gc3BhbSBvciB2aXJ1cyBjb250ZW50LiBJZiB5b3UgYmVsaWV2ZSB0aGF0IHRoaXMgZmFpbHVyZSBpcyBpbiBlcnJvciwgcGxlYXNlIHN1Ym1pdCBhbiB1bmJsb2NrIHJlcXVlc3QgYXQgIGh0dHA6Ly91bmJsb2NrLnNlY3VyZXNlcnZlci5uZXQNCi4uLiB3aGlsZSB0YWxraW5nIHRvIG1haWxzdG9yZTEuc2VjdXJlc2VydmVyLm5ldC46DQo8PDwgNTU0LW0xcGlzbXRwMDEtMDMyLnByb2QubWVzYTEuc2VjdXJlc2VydmVyLm5l... [Body clipped after 1000 chars, total length is 1320]]. Caused by: [javax.mail.FolderClosedException - null] javax.mail.FolderClosedException at com.sun.mail.imap.IMAPMessage.getProtocol(IMAPMessage.java:133) at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:843) at javax.mail.Message.setFlag(Message.java:565) at org.apache.camel.component.mail.MailConsumer.processCommit(MailConsumer.java:281) at org.apache.camel.component.mail.MailConsumer$1.onComplete(MailConsumer.java:176) at org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:55) at org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:172) at org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:121) at org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36) at org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:106) at org.apache.camel.processor.DefaultChannel$1.done(DefaultChannel.java:262) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:330) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:256) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:169) at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:111) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: processCommit:Error occurred during flagging message as DELETED/SEEN:javax.mail.MessagingException: A4 BAD Error in IMAP command STORE: Invalid messageset; nested exception is: com.sun.mail.iap.BadCommandException: A4 BAD Error in IMAP command STORE: Invalid messageset 2011-09-16 14:00:27,950 [Camel Thread 35 - seda://email_process] ERROR seda.SedaConsumer - Error processing exchange. Exchange[Message: TWFpbCBEZWxpdmVyeSBTdWJzeXN0ZW0gPE1BSUxFUi1EQUVNT05AaXBlYy5jbj4gICBUaGUgb3JpZ2luYWwgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYXQgRnJpLCAxNiBTZXAgMjAxMSAxNDowMDoyMiArMDgwMA0KZnJvbSBbMjAyLjEzNi42Mi4yNDNdDQoNCiAgIC0tLS0tIFRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzIGhhZCBwZXJtYW5lbnQgZmF0YWwgZXJyb3JzIC0tLS0tDQo8aW5mb0BzZWlraS5rb2l6dW1pLmNvLmpwPg0KICAgIChyZWFzb246IDU1NCBTZXJ2aWNlIHVuYXZhaWxhYmxlOyBDbGllbnQgaG9zdCBbaXBlYy5jbl0gYmxvY2tlZCB1c2luZyBCYXJyYWN1ZGEgUmVwdXRhdGlvbjsgaHR0cDovL2JibC5iYXJyYWN1ZGFjZW50cmFsLmNvbS9xLmNnaT9pcD0yMTkuMTQ2LjI1MS4yMTMpDQoNCiAgIC0tLS0tIFRyYW5zY3JpcHQgb2Ygc2Vzc2lvbiBmb2xsb3dzIC0tLS0tDQouLi4gd2hpbGUgdGFsa2luZyB0byBtczAxLmtvaXp1bWkuY28uanAuOg0KPj4+IERBVEENCjw8PCA1NTQgU2VydmljZSB1bmF2YWlsYWJsZTsgQ2xpZW50IGhvc3QgW2lwZWMuY25dIGJsb2NrZWQgdXNpbmcgQmFycmFjdWRhIFJlcHV0YXRpb247IGh0dHA6Ly9iYmwuYmFycmFjdWRhY2VudHJhbC5jb20vcS5jZ2k/aXA9MjE5LjE0Ni4yNTEuMjEzDQo1NTQgNS4wLjAgU2VydmljZSB1bmF2YWlsYWJsZQ0KNDUxIDQuNC4xIHJlcGx5OiByZWFkIGVycm9yIGZyb20gbXMwMS5rb2l6dW1pLmNvLmpwLg0K]. Caused by: [javax.mail.MessagingException - A4 BAD Error in IMAP command STORE: Invalid messageset] javax.mail.MessagingException: A4 BAD Error in IMAP command STORE: Invalid messageset; nested exception is: com.sun.mail.iap.BadCommandException: A4 BAD Error in IMAP command STORE: Invalid messageset at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:847) at javax.mail.Message.setFlag(Message.java:565) at org.apache.camel.component.mail.MailConsumer.processCommit(MailConsumer.java:281) at org.apache.camel.component.mail.MailConsumer$1.onComplete(MailConsumer.java:176) at org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:55) at org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:172) at org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:121) at org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36) at org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:106) at org.apache.camel.processor.DefaultChannel$1.done(DefaultChannel.java:262) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:330) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:208) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:256) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70) at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:169) at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:111) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: com.sun.mail.iap.BadCommandException: A4 BAD Error in IMAP command STORE: Invalid messageset at com.sun.mail.iap.Protocol.handleResult(Protocol.java:296) at com.sun.mail.imap.protocol.IMAPProtocol.storeFlags(IMAPProtocol.java:1294) at com.sun.mail.imap.protocol.IMAPProtocol.storeFlags(IMAPProtocol.java:1279) at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:843) ... 23 more AAA:closing folder processCommit:open folder. processCommit: OPENED?:true processCommit:Exchange processed, so flagging message as DELETED: AAA:closing folder The AAA:closing folder is the finally block. the code is as follows: /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.mail; import java.util.LinkedList; import java.util.Queue; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.FolderNotFoundException; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Store; import javax.mail.search.FlagTerm; import org.apache.camel.BatchConsumer; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.ShutdownRunningTask; import org.apache.camel.impl.ScheduledPollConsumer; import org.apache.camel.spi.ShutdownAware; import org.apache.camel.spi.Synchronization; import org.apache.camel.util.CastUtils; import org.apache.camel.util.ObjectHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.mail.javamail.JavaMailSenderImpl; /** * A {@link org.apache.camel.Consumer Consumer} which consumes messages from JavaMail using a * {@link javax.mail.Transport Transport} and dispatches them to the {@link Processor} * * @version $Revision: 980707 $ */ public class MailConsumer extends ScheduledPollConsumer implements BatchConsumer, ShutdownAware { public static final long DEFAULT_CONSUMER_DELAY = 60 * 1000L; private static final transient Log LOG = LogFactory.getLog(MailConsumer.class); private final MailEndpoint endpoint; private final JavaMailSenderImpl sender; private Folder folder; private Store store; private int maxMessagesPerPoll; private volatile ShutdownRunningTask shutdownRunningTask; private volatile int pendingExchanges; public MailConsumer(MailEndpoint endpoint, Processor processor, JavaMailSenderImpl sender) { super(endpoint, processor); this.endpoint = endpoint; this.sender = sender; } @Override protected void doStart() throws Exception { super.doStart(); } @Override protected void doStop() throws Exception { if (folder != null && folder.isOpen()) { folder.close(true); } if (store != null && store.isConnected()) { store.close(); } super.doStop(); } protected void poll() throws Exception { // must reset for each poll shutdownRunningTask = null; pendingExchanges = 0; ensureIsConnected(); if (store == null || folder == null) { throw new IllegalStateException("MailConsumer did not connect properly to the MailStore: " + endpoint.getConfiguration().getMailStoreLogInformation()); } if (LOG.isDebugEnabled()) { LOG.debug("Polling mailfolder: " + endpoint.getConfiguration().getMailStoreLogInformation()); } if (endpoint.getConfiguration().getFetchSize() == 0) { LOG.warn("Fetch size is 0 meaning the configuration is set to poll no new messages at all. Camel will skip this poll."); return; } // ensure folder is open if (!folder.isOpen()) { folder.open(Folder.READ_WRITE); } try { int count = folder.getMessageCount(); if (count > 0) { Message[] messages; // should we process all messages or only unseen messages if (endpoint.getConfiguration().isUnseen()) { messages = folder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false)); } else { messages = folder.getMessages(); } processBatch(CastUtils.cast(createExchanges(messages))); } else if (count == -1) { throw new MessagingException("Folder: " + folder.getFullName() + " is closed"); } } catch (Exception e) { handleException(e); } finally { // need to ensure we release resources try { if (folder.isOpen()) { LOG.info("AAA:closing folder"); System.out.println("AAA:closing folder"); folder.close(true); } } catch (Exception e) { // some mail servers will lock the folder so we ignore in this case (CAMEL-1263) System.out.println("AAA:closing folder exception:" + e.toString()); LOG.debug("Could not close mailbox folder: " + folder.getName(), e); } } } public void setMaxMessagesPerPoll(int maxMessagesPerPoll) { this.maxMessagesPerPoll = maxMessagesPerPoll; } public void processBatch(Queue exchanges) throws Exception { int total = exchanges.size(); // limit if needed if (maxMessagesPerPoll > 0 && total > maxMessagesPerPoll) { if (LOG.isDebugEnabled()) { LOG.debug("Limiting to maximum messages to poll " + maxMessagesPerPoll + " as there was " + total + " messages in this poll."); } total = maxMessagesPerPoll; } for (int index = 0; index < total && isBatchAllowed(); index++) { // only loop if we are started (allowed to run) Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll()); // add current index and total as properties exchange.setProperty(Exchange.BATCH_INDEX, index); exchange.setProperty(Exchange.BATCH_SIZE, total); exchange.setProperty(Exchange.BATCH_COMPLETE, index == total - 1); // update pending number of exchanges pendingExchanges = total - index - 1; // must use the original message in case we need to workaround a charset issue when extracting mail content final Message mail = exchange.getIn(MailMessage.class).getOriginalMessage(); // add on completion to handle after work when the exchange is done exchange.addOnCompletion(new Synchronization() { public void onComplete(Exchange exchange) { processCommit(mail, exchange); } public void onFailure(Exchange exchange) { processRollback(mail, exchange); } @Override public String toString() { return "MailConsumerOnCompletion"; } }); // process the exchange processExchange(exchange); } } public boolean deferShutdown(ShutdownRunningTask shutdownRunningTask) { // store a reference what to do in case when shutting down and we have pending messages this.shutdownRunningTask = shutdownRunningTask; // do not defer shutdown return false; } public int getPendingExchangesSize() { // only return the real pending size in case we are configured to complete all tasks if (ShutdownRunningTask.CompleteAllTasks == shutdownRunningTask) { return pendingExchanges; } else { return 0; } } public boolean isBatchAllowed() { // stop if we are not running boolean answer = isRunAllowed(); if (!answer) { return false; } if (shutdownRunningTask == null) { // we are not shutting down so continue to run return true; } // we are shutting down so only continue if we are configured to complete all tasks return ShutdownRunningTask.CompleteAllTasks == shutdownRunningTask; } protected Queue<Exchange> createExchanges(Message[] messages) throws MessagingException { Queue<Exchange> answer = new LinkedList<Exchange>(); int fetchSize = endpoint.getConfiguration().getFetchSize(); int count = fetchSize == -1 ? messages.length : Math.min(fetchSize, messages.length); if (LOG.isDebugEnabled()) { LOG.debug("Fetching " + count + " messages. Total " + messages.length + " messages."); } for (int i = 0; i < count; i++) { Message message = messages[i]; if (!message.getFlags().contains(Flags.Flag.DELETED)) { Exchange exchange = endpoint.createExchange(message); answer.add(exchange); } else { if (LOG.isDebugEnabled()) { LOG.debug("Skipping message as it was flagged as deleted: " + MailUtils.dumpMessage(message)); } } } return answer; } /** * Strategy to process the mail message. */ protected void processExchange(Exchange exchange) throws Exception { if (LOG.isDebugEnabled()) { MailMessage msg = (MailMessage) exchange.getIn(); LOG.debug("Processing message: " + MailUtils.dumpMessage(msg.getMessage())); } getProcessor().process(exchange); } /** * Strategy to flag the message after being processed. * * @param mail the mail message * @param exchange the exchange */ protected void processCommit(Message mail, Exchange exchange) { try { // ensure folder is open if (!folder.isOpen()) { LOG.info("processCommit:open folder."); System.out.println("processCommit:open folder."); folder.open(Folder.READ_WRITE); } System.out.println("processCommit: OPENED?:" + folder.isOpen()); if (endpoint.getConfiguration().isDelete()) { LOG.debug("Exchange processed, so flagging message as DELETED"); System.out.println("processCommit:Exchange processed, so flagging message as DELETED:"); mail.setFlag(Flags.Flag.DELETED, true); } else { LOG.debug("Exchange processed, so flagging message as SEEN"); System.out.println("processCommit:Exchange processed, so flagging message as SEEN"); mail.setFlag(Flags.Flag.SEEN, true); } } catch (MessagingException e) { System.out.println("processCommit:Error occurred during flagging message as DELETED/SEEN:" + e.toString()); LOG.warn("Error occurred during flagging message as DELETED/SEEN", e); exchange.setException(e); } } /** * Strategy when processing the exchange failed. * * @param mail the mail message * @param exchange the exchange */ protected void processRollback(Message mail, Exchange exchange) { Exception cause = exchange.getException(); if (cause != null) { LOG.warn("Exchange failed, so rolling back message status: " + exchange, cause); } else { LOG.warn("Exchange failed, so rolling back message status: " + exchange); } } private void ensureIsConnected() throws MessagingException { MailConfiguration config = endpoint.getConfiguration(); boolean connected = false; try { if (store != null && store.isConnected()) { connected = true; } } catch (Exception e) { LOG.debug("Exception while testing for is connected to MailStore: " + endpoint.getConfiguration().getMailStoreLogInformation() + ". Caused by: " + e.getMessage(), e); } if (!connected) { // ensure resources get recreated on reconnection store = null; folder = null; if (LOG.isDebugEnabled()) { LOG.debug("Connecting to MailStore: " + endpoint.getConfiguration().getMailStoreLogInformation()); } store = sender.getSession().getStore(config.getProtocol()); store.connect(config.getHost(), config.getPort(), config.getUsername(), config.getPassword()); } if (folder == null) { if (LOG.isDebugEnabled()) { LOG.debug("Getting folder " + config.getFolderName()); } folder = store.getFolder(config.getFolderName()); if (folder == null || !folder.exists()) { throw new FolderNotFoundException(folder, "Folder not found or invalid: " + config.getFolderName()); } } } } There is a new problem for iMAP command STORE. Please advice .Shall I upgrade to 2.8.0 ? regards, Kevin -- View this message in context: http://camel.465427.n5.nabble.com/camel-mail-imap-javax-mail-FolderClosedException-tp4796608p4809614.html Sent from the Camel - Users mailing list archive at Nabble.com.