10000 #105: added property "simplejavamail.opportunistic.tls" to disable th… · bbottema/simple-java-mail@0ab9484 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0ab9484

Browse files
committed
#105: added property "simplejavamail.opportunistic.tls" to disable the TLS mode for basic SMTP protocol (effectively reverting to the legacy behavior for SMTP_PLAIN
1 parent 493af3c commit 0ab9484

File tree

6 files changed

+62
-11
lines changed

6 files changed

+62
-11
lines changed

src/main/java/org/simplejavamail/mailer/config/TransportStrategy.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package org.simplejavamail.mailer.config;
22

3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
36
import javax.mail.Session;
47
import java.util.Properties;
58

69
import static java.lang.String.format;
10+
import static org.simplejavamail.util.ConfigLoader.Property.OPPORTUNISTIC_TLS;
11+
import static org.simplejavamail.util.ConfigLoader.getProperty;
12+
import static org.simplejavamail.util.ConfigLoader.hasProperty;
713

814
/**
915
* Defines the various types of transport protocols and implements respective properties so that a {@link Session} may be configured using a
@@ -48,10 +54,13 @@ public enum TransportStrategy {
4854
public Properties generateProperties() {
4955
final Properties props = super.generateProperties();
5056
props.put("mail.transport.protocol", "smtp");
51-
props.put("mail.smtp.starttls.enable", true);
52-
props.put("mail.smtp.starttls.required", false);
53-
props.put("mail.smtp.ssl.trust", "*");
54-
props.put("mail.smtp.ssl.checkserveridentity", false);
57+
if (!hasProperty(OPPORTUNISTIC_TLS) || (Boolean) getProperty(OPPORTUNISTIC_TLS)) {
58+
LOGGER.debug("Opportunistic TLS mode enabled for SMTP plain protocol (can be disabled with property 'simplejavamail.opportunistic.tls').");
59+
props.put("mail.smtp.starttls.enable", "true");
60+
props.put("mail.smtp.starttls.required", "false");
61+
props.put("mail.smtp.ssl.trust", "*");
62+
props.put("mail.smtp.ssl.checkserveridentity", "false");
63+
}
5564
return props;
5665
}
5766

@@ -387,7 +396,9 @@ public String propertyNameSSLTrust() {
387396
return "mail.smtp.ssl.trust";
388397
}
389398
};
390-
399+
400+
private static final Logger LOGGER = LoggerFactory.getLogger(TransportStrategy.class);
401+
391402
/**
392403
* Marker property used to track which {@link TransportStrategy} has been used. This way we can differentiate between preconfigured custom
393404
* <code>Session</code> and sessions created by a <code>Mailer</code> instance, without checking each and every property for a specific strategy.
@@ -424,6 +435,7 @@ public Properties generateProperties() {
424435
/**
425436
* @param session The session to determine the current transport strategy for
426437
* @return Which strategy matches the current Session properties.
438+
* @see #TRANSPORT_STRATEGY_MARKER
427439
* @see #generateProperties()
428440
*/
429441
public static TransportStrategy findStrategyForSession(final Session session) {

src/main/java/org/simplejavamail/springsupport/SimpleJavaMailSpringSupport.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public Mailer loadGlobalConfigAndCreateDefaultMailer(
4242
@Value("${simplejavamail.defaults.bcc.address:#{null}}") final String defaultBccAddress,
4343
@Value("${simplejavamail.defaults.poolsize:#{null}}") final String defaultPoolsize,
4444
@Value("${simplejavamail.defaults.sessiontimeoutmillis:#{null}}") final String defaultSessionTimeoutMillis,
45-
@Value("${simplejavamail.transport.mode.logging.only:#{null}}") final String defaultTransportModeLoggingOnly) {
45+
@Value("${simplejavamail.transport.mode.logging.only:#{null}}") final String defaultTransportModeLoggingOnly,
46+
@Value("${simplejavamail.opportunistic.tls:#{null}}") final String defaultOpportunisticTls) {
4647
final Properties emailProperties = new Properties();
4748
setNullableProperty(emailProperties, Property.JAVAXMAIL_DEBUG.key(), javaxmailDebug);
4849
setNullableProperty(emailProperties, Property.TRANSPORT_STRATEGY.key(), transportstrategy);
@@ -71,6 +72,7 @@ public Mailer loadGlobalConfigAndCreateDefaultMailer(
7172
setNullableProperty(emailProperties, Property.DEFAULT_POOL_SIZE.key(), defaultPoolsize);
7273
setNullableProperty(emailProperties, Property.DEFAULT_SESSION_TIMEOUT_MILLIS.key(), defaultSessionTimeoutMillis);
7374
setNullableProperty(emailProperties, Property.TRANSPORT_MODE_LOGGING_ONLY.key(), defaultTransportModeLoggingOnly);
75+
setNullableProperty(emailProperties, Property.OPPORTUNISTIC_TLS.key(), defaultOpportunisticTls);
7476

7577
ConfigLoader.loadProperties(emailProperties, true);
7678

src/main/java/org/simplejavamail/util/ConfigLoader.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
* <li>simplejavamail.defaults.poolsize</li>
5151
* <li>simplejavamail.defaults.sessiontimeoutmillis</li>
5252
* <li>simplejavamail.transport.mode.logging.only</li>
53+
* <li>simplejavamail.opportunistic.tls</li>
5354
* </ul></pre>
5455
*/
5556
public final class ConfigLoader {
@@ -100,7 +101,8 @@ public enum Property {
100101
DEFAULT_BCC_ADDRESS("simplejavamail.defaults.bcc.address"),
101102
DEFAULT_POOL_SIZE("simplejavamail.defaults.poolsize"),
102103
DEFAULT_SESSION_TIMEOUT_MILLIS("simplejavamail.defaults.sessiontimeoutmillis"),
103-
TRANSPORT_MODE_LOGGING_ONLY("simplejavamail.transport.mode.logging.only");
104+
TRANSPORT_MODE_LOGGING_ONLY("simplejavamail.transport.mode.logging.only"),
105+
OPPORTUNISTIC_TLS("simplejavamail.opportunistic.tls");
104106

105107
private final String key;
106108

src/test/java/org/simplejavamail/mailer/MailerTest.java

+36-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.mockito.Mockito.when;
2626
import static org.simplejavamail.mailer.config.TransportStrategy.SMTPS;
2727
import static org.simplejavamail.mailer.config.TransportStrategy.SMTP_TLS;
28+
import static org.simplejavamail.util.ConfigLoader.Property.OPPORTUNISTIC_TLS;
2829

2930
@SuppressWarnings("unused")
3031
public class MailerTest {
@@ -58,6 +59,12 @@ public void createMailSession_MinimalConstructor_WithoutConfig()
5859
assertThat(session.getProperty("mail.smtp.host")).isEqualTo("host");
5960
assertThat(session.getProperty("mail.smtp.port")).isEqualTo("25");
6061
assertThat(session.getProperty("mail.transport.protocol")).isEqualTo("smtp");
62+
63+
assertThat(session.getProperty("mail.smtp.starttls.enable")).isEqualTo("true");
64+
assertThat(session.getProperty("mail.smtp.starttls.required")).isEqualTo("false");
65+
assertThat(session.getProperty("mail.smtp.ssl.trust")).isEqualTo("*");
66+
assertThat(session.getProperty("mail.smtp.ssl.checkserveridentity")).isEqualTo("false");
67+
6168
assertThat(session.getProperty("mail.smtp.username")).isNull();
6269
assertThat(session.getProperty("mail.smtp.auth")).isNull();
6370
assertThat(session.getProperty("mail.smtp.socks.host")).isNull();
@@ -92,9 +99,11 @@ public void createMailSession_AnonymousProxyConstructor_WithoutConfig()
9299
assertThat(session.getProperty("mail.smtp.host")).isEqualTo("smtp host");
93100
assertThat(session.getProperty("mail.smtp.port")).isEqualTo("25");
94101
assertThat(session.getProperty("mail.transport.protocol")).isEqualTo("smtp");
102+
95103
assertThat(session.getProperty("mail.smtp.starttls.enable")).isEqualTo("true");
96104
assertThat(session.getProperty("mail.smtp.starttls.required")).isEqualTo("true");
97105
assertThat(session.getProperty("mail.smtp.ssl.checkserveridentity")).isEqualTo("true");
106+
98107
assertThat(session.getProperty("mail.smtp.username")).isEqualTo("username smtp");
99108
assertThat(session.getProperty("mail.smtp.auth")).isEqualTo("true");
100109
assertThat(session.getProperty("mail.smtp.socks.host")).isEqualTo("proxy host");
@@ -127,12 +136,12 @@ public void createMailSession_MaximumConstructor_WithoutConfig()
127136
assertThat(session.getProperty("extra1")).isEqualTo("value1");
128137
assertThat(session.getProperty("extra2")).isEqualTo("value2");
129138
}
130-
139+
131140
@Test
132141
public void createMailSession_MinimalConstructor_WithConfig() {
133142
Mailer mailer = new Mailer();
134143
Session session = mailer.getSession();
135-
144+
136145
assertThat(session.getDebug()).isTrue();
137146
assertThat(session.getProperty("mail.smtp.host")).isEqualTo("smtp.default.com");
138147
assertThat(session.getProperty("mail.smtp.port")).isEqualTo("25");
@@ -147,6 +156,31 @@ public void createMailSession_MinimalConstructor_WithConfig() {
147156
assertThat(session.getProperty("mail.smtp.socks.port")).isEqualTo("1081");
148157
}
149158

159+
@Test
160+
public void createMailSession_MinimalConstructor_WithConfig_OPPORTUNISTIC_TLS() {
161+
Properties properties = new Properties();
162+
properties.setProperty(OPPORTUNISTIC_TLS.key(), "false");
163+
ConfigLoader.loadProperties(properties, true);
164+
165+
Mailer mailer = new Mailer(TransportStrategy.SMTP);
166+
Session session = mailer.getSession();
167+
168+
assertThat(session.getDebug()).isTrue();
169+
assertThat(session.getProperty("mail.smtp.host")).isEqualTo("smtp.default.com");
170+
assertThat(session.getProperty("mail.smtp.port")).isEqualTo("25");
171+
assertThat(session.getProperty("mail.transport.protocol")).isEqualTo("smtp");
172+
173+
assertThat(session.getProperty("mail.smtp.starttls.enable")).isNull();
174+
assertThat(session.getProperty("mail.smtp.starttls.required")).isNull();
175+
assertThat(session.getProperty("mail.smtp.ssl.checkserveridentity")).isNull();
176+
1C6A
177+
assertThat(session.getProperty("mail.smtp.username")).isEqualTo("username smtp");
178+
assertThat(session.getProperty("mail.smtp.auth")).isEqualTo("true");
179+
// the following two are because authentication is needed, otherwise proxy would be straightworward
180+
assertThat(session.getProperty("mail.smtp.socks.host")).isEqualTo("localhost");
181+
assertThat(session.getProperty("mail.smtp.socks.port")).isEqualTo("1081");
182+
}
183+
150184
@Test
151185
public void createMailSession_MaximumConstructor_WithConfig()
152186
throws Exception {

src/test/resources/ignore.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ simplejavamail.defaults.cc.name=moo
2222
simplejavamail.defaults.cc.address=moo
2323
simplejavamail.defaults.bcc.name=moo
2424
simplejavamail.defaults.bcc.address=moo
25-
simplejavamail.transport.mode.logging.only=moo
25+
simplejavamail.transport.mode.logging.only=moo
26+
simplejavamail.opportunistic.tls=moo

src/test/resources/simplejavamail.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ simplejavamail.defaults.cc.name=CC Default
2222
simplejavamail.defaults.cc.address=cc@default.com
2323
simplejavamail.defaults.bcc.name=BCC Default
2424
simplejavamail.defaults.bcc.address=bcc@default.com
25-
simplejavamail.transport.mode.logging.only=false
25+
simplejavamail.opportunistic.tls=true

0 commit comments

Comments
 (0)
0