This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new f08c00c CAMEL-14595: camel-mail - Allow to use headers for additional mail properties f08c00c is described below commit f08c00c0c9e3e1628a321c54e5d02e7205c7d47a Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Mar 16 11:34:59 2020 +0100 CAMEL-14595: camel-mail - Allow to use headers for additional mail properties --- .../camel-mail/src/main/docs/mail-component.adoc | 19 +++++++++++++++++++ .../camel/component/mail/DefaultJavaMailSender.java | 6 ++++++ .../apache/camel/component/mail/JavaMailSender.java | 3 +++ .../org/apache/camel/component/mail/MailProducer.java | 18 ++++++++++++++++++ .../component/mail/MailCustomMailSenderTest.java | 5 +++++ 5 files changed, 51 insertions(+) diff --git a/components/camel-mail/src/main/docs/mail-component.adoc b/components/camel-mail/src/main/docs/mail-component.adoc index 04c5e34..f522c30 100644 --- a/components/camel-mail/src/main/docs/mail-component.adoc +++ b/components/camel-mail/src/main/docs/mail-component.adoc @@ -713,4 +713,23 @@ These parameters should help to prevent bad performance when working with folder In previous versions these parameters have been evaluated too late, so that big mailboxes could still cause performance problems. With Camel 3.1 these parameters are evaluated earlier during the poll to avoid these problems. +== Using headers with additional Java Mail Sender properties + +*Since Camel 3.2* + +When sending mails, then you can provide dynamic java mail properties for the `JavaMailSender` from +the Exchange as message headers with keys starting with `java.smtp.`. + +You can set any of the `java.smtp` properties which you can find in the Java Mail documentation. + +For example to provide a dynamic uuid in `java.smtp.from` (SMTP MAIL command): + +[source,java] +---- + .setHeader("from", constant("reply...@foo.com")); + .setHeader("java.smtp.from", method(UUID.class, "randomUUID")); + .to("smtp://mymailserver:1234"); +---- + + include::camel-spring-boot::page$mail-starter.adoc[] diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultJavaMailSender.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultJavaMailSender.java index b8b1b33..d6b2d06 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultJavaMailSender.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/DefaultJavaMailSender.java @@ -17,6 +17,7 @@ package org.apache.camel.component.mail; import java.util.Date; +import java.util.Map; import java.util.Properties; import javax.mail.MessagingException; @@ -68,6 +69,11 @@ public class DefaultJavaMailSender implements JavaMailSender { } @Override + public void addAdditionalJavaMailProperties(Map<String, Object> additional) { + getJavaMailProperties().putAll(additional); + } + + @Override public String getPassword() { return password; } diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailSender.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailSender.java index a0bb396..ac6cab3 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailSender.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailSender.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.mail; +import java.util.Map; import java.util.Properties; import javax.mail.MessagingException; @@ -40,6 +41,8 @@ public interface JavaMailSender { void setJavaMailProperties(Properties javaMailProperties); + void addAdditionalJavaMailProperties(Map<String, Object> additional); + void setHost(String host); String getHost(); diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java index 7f96971..d327aef 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java @@ -17,6 +17,7 @@ package org.apache.camel.component.mail; import java.io.IOException; +import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; @@ -24,6 +25,7 @@ import javax.mail.internet.MimeMessage; import org.apache.camel.AsyncCallback; import org.apache.camel.Exchange; import org.apache.camel.support.DefaultAsyncProducer; +import org.apache.camel.util.URISupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,4 +83,20 @@ public class MailProducer extends DefaultAsyncProducer { public MailEndpoint getEndpoint() { return (MailEndpoint) super.getEndpoint(); } + + protected JavaMailSender getSender(Exchange exchange) { + // do we have special headers + Map<String, Object> additional = URISupport.extractProperties(exchange.getMessage().getHeaders(), "mail.smtp."); + if (additional.isEmpty()) { + // no then use default sender + LOG.trace("Using default JavaMailSender"); + return sender; + } else { + // create new mail sender specially for this + LOG.debug("Creating new JavaMailSender to include additional {} java mail properties", additional.size()); + JavaMailSender customSender = getEndpoint().getConfiguration().createJavaMailSender(); + customSender.addAdditionalJavaMailProperties(additional); + return customSender; + } + } } diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomMailSenderTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomMailSenderTest.java index 1fbd429..7f761ff 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomMailSenderTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCustomMailSenderTest.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.mail; +import java.util.Map; import java.util.Properties; import javax.mail.MessagingException; @@ -53,6 +54,10 @@ public class MailCustomMailSenderTest extends CamelTestSupport { } @Override + public void addAdditionalJavaMailProperties(Map<String, Object> additional) { + } + + @Override public void setJavaMailProperties(Properties javaMailProperties) { }