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) {
         }
 

Reply via email to