You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/03/16 10:35:54 UTC

[camel] branch master updated: CAMEL-14595: camel-mail - Allow to use headers for additional mail properties

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 <cl...@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("reply2me@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) {
         }