Author: davsclaus Date: Sun May 20 14:52:17 2012 New Revision: 1340747 URL: http://svn.apache.org/viewvc?rev=1340747&view=rev Log: Added copyTo option. Allow to override delete and copyTo options using headers. Thanks to Benoit and Daniel for the patches.
Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java?rev=1340747&r1=1340746&r2=1340747&view=diff ============================================================================== --- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java (original) +++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java Sun May 20 14:52:17 2012 @@ -48,6 +48,7 @@ public class MailConfiguration implement private String from = MailConstants.MAIL_DEFAULT_FROM; private String folderName = MailConstants.MAIL_DEFAULT_FOLDER; private boolean delete; + private String copyTo; private boolean unseen = true; private boolean ignoreUriScheme; private Map<Message.RecipientType, String> recipients = new HashMap<Message.RecipientType, String>(); @@ -475,4 +476,12 @@ public class MailConfiguration implement public void setSslContextParameters(SSLContextParameters sslContextParameters) { this.sslContextParameters = sslContextParameters; } + + public String getCopyTo() { + return copyTo; + } + + public void setCopyTo(String copyTo) { + this.copyTo = copyTo; + } } Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java?rev=1340747&r1=1340746&r2=1340747&view=diff ============================================================================== --- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java (original) +++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java Sun May 20 14:52:17 2012 @@ -275,7 +275,26 @@ public class MailConsumer extends Schedu } } - if (getEndpoint().getConfiguration().isDelete()) { + org.apache.camel.Message in = exchange.getIn(); + MailConfiguration config = getEndpoint().getConfiguration(); + // header values override configuration values + String copyTo = in.getHeader("copyTo", config.getCopyTo(), String.class); + boolean delete = in.getHeader("delete", config.isDelete(), boolean.class); + + // Copy message into different imap folder if asked + if (config.getProtocol().equals(MailUtils.PROTOCOL_IMAP) || config.getProtocol().equals(MailUtils.PROTOCOL_IMAPS)) { + if (copyTo != null) { + LOG.trace("IMAP message needs to be copied to {}", copyTo); + Folder destFolder = store.getFolder(copyTo); + if (!destFolder.exists()) { + destFolder.create(Folder.HOLDS_MESSAGES); + } + folder.copyMessages(new Message[]{mail}, destFolder); + LOG.trace("IMAP message {} copied to {}", mail, copyTo); + } + } + + if (delete) { LOG.trace("Exchange processed, so flagging message as DELETED"); mail.setFlag(Flags.Flag.DELETED, true); } else { @@ -283,8 +302,7 @@ public class MailConsumer extends Schedu mail.setFlag(Flags.Flag.SEEN, true); } } catch (MessagingException e) { - LOG.warn("Error occurred during flagging message as DELETED/SEEN", e); - exchange.setException(e); + getExceptionHandler().handleException("Error occurred during committing mail message: " + mail, exchange, e); } }