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 2026/04/10 09:09:01 UTC
(camel) branch ms created (now b26982456016)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a change to branch ms
in repository https://gitbox.apache.org/repos/asf/camel.git
at b26982456016 CAMEL-23308: camel-mail - Using a custom JavaMailSender should still be default configured
This branch includes the following new commits:
new b26982456016 CAMEL-23308: camel-mail - Using a custom JavaMailSender should still be default configured
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(camel) 01/01: CAMEL-23308: camel-mail - Using a custom JavaMailSender should still be default configured
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch ms
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b26982456016690f433847aa721fa8996bb99f64
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Apr 10 11:08:40 2026 +0200
CAMEL-23308: camel-mail - Using a custom JavaMailSender should still be default configured
---
.../camel/component/mail/MailConfiguration.java | 97 ++++++++++++----------
.../apache/camel/component/mail/MailEndpoint.java | 2 +
.../apache/camel/component/mail/MailProducer.java | 1 +
.../component/mail/MailCustomMailSenderTest.java | 11 ++-
.../camel/component/mail/MailEndpointTlsTest.java | 12 ++-
.../ROOT/pages/camel-4x-upgrade-guide-4_19.adoc | 5 ++
6 files changed, 77 insertions(+), 51 deletions(-)
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
index 1036ea4c9009..b54110601788 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
@@ -205,71 +205,76 @@ public class MailConfiguration implements Cloneable {
}
protected JavaMailSender createJavaMailSender(CamelContext context) {
- JavaMailSender answer = new DefaultJavaMailSender();
+ return new DefaultJavaMailSender();
+ }
- if (javaMailProperties != null) {
- answer.setJavaMailProperties(javaMailProperties);
- } else {
- // set default properties if none provided
- answer.setJavaMailProperties(createJavaMailProperties(context));
- // add additional properties if provided
- if (additionalJavaMailProperties != null) {
- answer.getJavaMailProperties().putAll(additionalJavaMailProperties);
+ protected void configureJavaMailSender(CamelContext context, JavaMailSender answer) {
+ if (answer.getJavaMailProperties() == null || answer.getJavaMailProperties().isEmpty()) {
+ if (javaMailProperties != null) {
+ answer.setJavaMailProperties(javaMailProperties);
+ } else {
+ // set default properties if none provided
+ answer.setJavaMailProperties(createJavaMailProperties(context));
+ // add additional properties if provided
+ if (additionalJavaMailProperties != null) {
+ answer.getJavaMailProperties().putAll(additionalJavaMailProperties);
+ }
}
}
- if (host != null) {
+ if (answer.getHost() == null && host != null) {
answer.setHost(host);
}
- if (port >= 0) {
+ if (answer.getPort() <= 0 && port >= 0) {
answer.setPort(port);
}
- if (username != null) {
+ if (answer.getUsername() == null && username != null) {
answer.setUsername(username);
}
- if (password != null) {
+ if (answer.getPassword() == null && password != null) {
answer.setPassword(password);
}
- if (authenticator != null) {
+ if (answer.getAuthenticator() == null && authenticator != null) {
answer.setAuthenticator(authenticator);
}
- if (protocol != null) {
+ if (answer.getProtocol() == null && protocol != null) {
answer.setProtocol(protocol);
}
- if (session != null) {
- answer.setSession(session);
- String hostPropertyValue = session.getProperty("mail.smtp.host");
- if (hostPropertyValue == null || hostPropertyValue.isEmpty()) {
- hostPropertyValue = session.getProperty("mail.smtps.host");
- }
- if (hostPropertyValue != null && !hostPropertyValue.isEmpty()) {
- answer.setHost(hostPropertyValue);
- }
- String portPropertyValue = session.getProperty("mail.smtp.port");
- if (portPropertyValue == null || portPropertyValue.isEmpty()) {
- portPropertyValue = session.getProperty("mail.smtps.port");
- }
- if (portPropertyValue != null && !portPropertyValue.isEmpty()) {
- answer.setPort(Integer.parseInt(portPropertyValue));
- }
- } else {
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
- try {
- if (applicationClassLoader != null) {
- Thread.currentThread().setContextClassLoader(applicationClassLoader);
+ if (answer.getSession() == null) {
+ if (session != null) {
+ answer.setSession(session);
+ String hostPropertyValue = session.getProperty("mail.smtp.host");
+ if (hostPropertyValue == null || hostPropertyValue.isEmpty()) {
+ hostPropertyValue = session.getProperty("mail.smtps.host");
+ }
+ if (hostPropertyValue != null && !hostPropertyValue.isEmpty()) {
+ answer.setHost(hostPropertyValue);
+ }
+ String portPropertyValue = session.getProperty("mail.smtp.port");
+ if (portPropertyValue == null || portPropertyValue.isEmpty()) {
+ portPropertyValue = session.getProperty("mail.smtps.port");
+ }
+ if (portPropertyValue != null && !portPropertyValue.isEmpty()) {
+ answer.setPort(Integer.parseInt(portPropertyValue));
+ }
+ } else {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+ if (applicationClassLoader != null) {
+ Thread.currentThread().setContextClassLoader(applicationClassLoader);
+ }
+ // use our authenticator that does not live user interaction but returns the already configured username and password
+ Session sessionInstance = Session.getInstance(answer.getJavaMailProperties(),
+ authenticator == null
+ ? new DefaultAuthenticator(answer.getUsername(), answer.getPassword()) : authenticator);
+ // sets the debug mode of the underlying mail framework
+ sessionInstance.setDebug(debugMode);
+ answer.setSession(sessionInstance);
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
}
- // use our authenticator that does not live user interaction but returns the already configured username and password
- Session sessionInstance = Session.getInstance(answer.getJavaMailProperties(),
- authenticator == null ? new DefaultAuthenticator(getUsername(), getPassword()) : authenticator);
- // sets the debug mode of the underlying mail framework
- sessionInstance.setDebug(debugMode);
- answer.setSession(sessionInstance);
- } finally {
- Thread.currentThread().setContextClassLoader(tccl);
}
}
-
- return answer;
}
private Properties createJavaMailProperties(CamelContext context) {
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
index c178fe7350c7..fddb518f54a8 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
@@ -122,6 +122,7 @@ public class MailEndpoint extends ScheduledPollEndpoint implements HeaderFilterS
// use default mail sender
sender = configuration.createJavaMailSender(getCamelContext());
}
+ configuration.configureJavaMailSender(getCamelContext(), sender);
return createProducer(sender);
}
@@ -142,6 +143,7 @@ public class MailEndpoint extends ScheduledPollEndpoint implements HeaderFilterS
// must use java mail sender impl as we need to get hold of a mail session
JavaMailSender sender = configuration.createJavaMailSender(getCamelContext());
+ configuration.configureJavaMailSender(getCamelContext(), sender);
return createConsumer(processor, sender);
}
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 d1ab2f2a5532..5b84f28ff1e1 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
@@ -103,6 +103,7 @@ public class MailProducer extends DefaultAsyncProducer {
LOG.debug("Creating new JavaMailSender to include additional {} java mail properties", additional.size());
JavaMailSender customSender
= getEndpoint().getConfiguration().createJavaMailSender(getEndpoint().getCamelContext());
+ getEndpoint().getConfiguration().configureJavaMailSender(getEndpoint().getCamelContext(), customSender);
final String scheme = prefix;
additional.forEach((k, v) -> {
if (v != null) {
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 f922b77db776..a59ea8db2ce3 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
@@ -27,6 +27,7 @@ import org.apache.camel.component.mail.Mailbox.Protocol;
import org.apache.camel.test.junit6.CamelTestSupport;
import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class MailCustomMailSenderTest extends CamelTestSupport {
@@ -42,10 +43,15 @@ public class MailCustomMailSenderTest extends CamelTestSupport {
sendBody(claus.uriPrefix(Protocol.smtp) + "&javaMailSender=#mySender", "Hello World");
assertTrue(sent, "Should have used custom mail sender");
+
+ // should also be configured
+ assertEquals(Protocol.smtp.name(), sender.getProtocol());
}
private static class MySender implements JavaMailSender {
+ private String protocol;
+
@Override
public void send(MimeMessage mimeMessage) {
sent = true;
@@ -53,7 +59,7 @@ public class MailCustomMailSenderTest extends CamelTestSupport {
@Override
public Properties getJavaMailProperties() {
- return null;
+ return new Properties();
}
@Override
@@ -102,11 +108,12 @@ public class MailCustomMailSenderTest extends CamelTestSupport {
@Override
public void setProtocol(String protocol) {
+ this.protocol = protocol;
}
@Override
public String getProtocol() {
- return null;
+ return protocol;
}
@Override
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailEndpointTlsTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailEndpointTlsTest.java
index 54b28d971e78..75ea3cc46273 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailEndpointTlsTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailEndpointTlsTest.java
@@ -58,7 +58,9 @@ public class MailEndpointTlsTest extends CamelTestSupport {
assertTrue(cfg.isStartTlsEnabled());
- Properties javaMailProperties = cfg.createJavaMailSender(context).getJavaMailProperties();
+ var sender = cfg.createJavaMailSender(context);
+ cfg.configureJavaMailSender(context, sender);
+ Properties javaMailProperties = sender.getJavaMailProperties();
assertNull(javaMailProperties.get("mail." + protocol + ".ssl.socketFactory"));
assertNull(javaMailProperties.get("mail." + protocol + ".ssl.socketFactory.port"));
}
@@ -74,7 +76,9 @@ public class MailEndpointTlsTest extends CamelTestSupport {
cfg.setPassword("secret");
cfg.setSslContextParameters(MailTestHelper.createSslContextParameters());
- Properties javaMailProperties = cfg.createJavaMailSender(context).getJavaMailProperties();
+ var sender = cfg.createJavaMailSender(context);
+ cfg.configureJavaMailSender(context, sender);
+ Properties javaMailProperties = sender.getJavaMailProperties();
assertFalse(cfg.isStartTlsEnabled());
@@ -108,7 +112,9 @@ public class MailEndpointTlsTest extends CamelTestSupport {
assertTrue(cfg.isStartTlsEnabled());
- Properties javaMailProperties = cfg.createJavaMailSender(context).getJavaMailProperties();
+ var sender = cfg.createJavaMailSender(context);
+ cfg.configureJavaMailSender(context, sender);
+ Properties javaMailProperties = sender.getJavaMailProperties();
assertNotNull(javaMailProperties.get("mail." + protocol + ".ssl.socketFactory"));
assertNotNull(javaMailProperties.get("mail." + protocol + ".ssl.socketFactory.port"));
}
diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc
index de3ff64803d4..a1cc5627cccd 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_19.adoc
@@ -509,6 +509,11 @@ documentation for migration guidance.
Debezium has been upgraded from 3.4.x to 3.5.0.
+=== camel-mail
+
+When using a custom `MailSender` implementation then Camel will now configure this instances as well, with the various
+settings for hostname, protocol, port, etc.
+
=== camel-ftp
The `camel-ftp` component has been refactored to extract shared FTP/SFTP code into a new `camel-ftp-common` module.