From 29c492f4367084eb91d9b531385f45bfe8100fff Mon Sep 17 00:00:00 2001 From: Benny Bottema Date: Fri, 27 Jan 2017 23:15:22 +0100 Subject: [PATCH] added optional support for Spring (for property loading) --- pom.xml | 24 ++++++ .../java/org/simplejavamail/email/Email.java | 6 +- .../simplejavamail/email/EmailBuilder.java | 6 +- .../org/simplejavamail/mailer/Mailer.java | 6 +- .../mailer/config/ProxyConfig.java | 4 +- .../mailer/config/ServerConfig.java | 4 +- .../internal/mailsender/MailSender.java | 4 +- .../{internal => }/util/ConfigLoader.java | 2 +- .../util/SimpleJavaMailSpringSupport.java | 78 +++++++++++++++++++ .../org/simplejavamail/email/EmailTest.java | 5 +- .../org/simplejavamail/mailer/MailerTest.java | 2 +- .../mailer/ProxyConfigTest.java | 2 +- .../mailer/ServerConfigTest.java | 2 +- .../{internal => }/util/ConfigLoaderTest.java | 27 ++++++- .../java/testutil/ConfigLoaderTestHelper.java | 4 +- 15 files changed, 148 insertions(+), 28 deletions(-) rename src/main/java/org/simplejavamail/{internal => }/util/ConfigLoader.java (99%) create mode 100644 src/main/java/org/simplejavamail/util/SimpleJavaMailSpringSupport.java rename src/test/java/org/simplejavamail/{internal => }/util/ConfigLoaderTest.java (87%) diff --git a/pom.xml b/pom.xml index 500ce15f0..516bdaffc 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,30 @@ 3.0.1 + + + org.springframework + spring-core + 4.3.5.RELEASE + compile + true + + + org.springframework + spring-context + 4.3.5.RELEASE + compile + true + + + org.springframework + spring-beans + 4.3.5.RELEASE + compile + true + + + junit diff --git a/src/main/java/org/simplejavamail/email/Email.java b/src/main/java/org/simplejavamail/email/Email.java index a6f370b24..53a095bac 100644 --- a/src/main/java/org/simplejavamail/email/Email.java +++ b/src/main/java/org/simplejavamail/email/Email.java @@ -15,9 +15,9 @@ import java.util.regex.Pattern; import static java.lang.String.format; -import static org.simplejavamail.internal.util.ConfigLoader.Property.*; -import static org.simplejavamail.internal.util.ConfigLoader.getProperty; -import static org.simplejavamail.internal.util.ConfigLoader.hasProperty; +import static org.simplejavamail.util.ConfigLoader.Property.*; +import static org.simplejavamail.util.ConfigLoader.getProperty; +import static org.simplejavamail.util.ConfigLoader.hasProperty; /** * Email message with all necessary data for an effective mailing action, including attachments etc. diff --git a/src/main/java/org/simplejavamail/email/EmailBuilder.java b/src/main/java/org/simplejavamail/email/EmailBuilder.java index 0169acbcd..c40eb6516 100644 --- a/src/main/java/org/simplejavamail/email/EmailBuilder.java +++ b/src/main/java/org/simplejavamail/email/EmailBuilder.java @@ -12,9 +12,9 @@ import java.util.Map; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.simplejavamail.internal.util.ConfigLoader.Property.*; -import static org.simplejavamail.internal.util.ConfigLoader.getProperty; -import static org.simplejavamail.internal.util.ConfigLoader.hasProperty; +import static org.simplejavamail.util.ConfigLoader.Property.*; +import static org.simplejavamail.util.ConfigLoader.getProperty; +import static org.simplejavamail.util.ConfigLoader.hasProperty; /** * Fluent interface Builder for Emails diff --git a/src/main/java/org/simplejavamail/mailer/Mailer.java b/src/main/java/org/simplejavamail/mailer/Mailer.java index 6d31c303d..a071d0c5a 100644 --- a/src/main/java/org/simplejavamail/mailer/Mailer.java +++ b/src/main/java/org/simplejavamail/mailer/Mailer.java @@ -21,9 +21,9 @@ import static java.lang.String.format; import static org.hazlewood.connor.bottema.emailaddress.EmailAddressCriteria.RFC_COMPLIANT; -import static org.simplejavamail.internal.util.ConfigLoader.Property.JAVAXMAIL_DEBUG; -import static org.simplejavamail.internal.util.ConfigLoader.Property.TRANSPORT_STRATEGY; -import static org.simplejavamail.internal.util.ConfigLoader.*; +import static org.simplejavamail.util.ConfigLoader.Property.JAVAXMAIL_DEBUG; +import static org.simplejavamail.util.ConfigLoader.Property.TRANSPORT_STRATEGY; +import static org.simplejavamail.util.ConfigLoader.*; import static org.simplejavamail.mailer.config.TransportStrategy.findStrategyForSession; /** diff --git a/src/main/java/org/simplejavamail/mailer/config/ProxyConfig.java b/src/main/java/org/simplejavamail/mailer/config/ProxyConfig.java index 383c0b501..0328137c9 100644 --- a/src/main/java/org/simplejavamail/mailer/config/ProxyConfig.java +++ b/src/main/java/org/simplejavamail/mailer/config/ProxyConfig.java @@ -3,8 +3,8 @@ import org.simplejavamail.mailer.internal.socks.SocksProxyConfig; import static java.lang.String.format; -import static org.simplejavamail.internal.util.ConfigLoader.Property.*; -import static org.simplejavamail.internal.util.ConfigLoader.valueOrProperty; +import static org.simplejavamail.util.ConfigLoader.Property.*; +import static org.simplejavamail.util.ConfigLoader.valueOrProperty; import static org.simplejavamail.internal.util.MiscUtil.checkArgumentNotEmpty; import static org.simplejavamail.internal.util.MiscUtil.valueNullOrEmpty; diff --git a/src/main/java/org/simplejavamail/mailer/config/ServerConfig.java b/src/main/java/org/simplejavamail/mailer/config/ServerConfig.java index dc14eaf42..d4b4b41cf 100644 --- a/src/main/java/org/simplejavamail/mailer/config/ServerConfig.java +++ b/src/main/java/org/simplejavamail/mailer/config/ServerConfig.java @@ -1,8 +1,8 @@ package org.simplejavamail.mailer.config; import static java.lang.String.format; -import static org.simplejavamail.internal.util.ConfigLoader.Property.*; -import static org.simplejavamail.internal.util.ConfigLoader.valueOrProperty; +import static org.simplejavamail.util.ConfigLoader.Property.*; +import static org.simplejavamail.util.ConfigLoader.valueOrProperty; import static org.simplejavamail.internal.util.MiscUtil.checkArgumentNotEmpty; import static org.simplejavamail.internal.util.MiscUtil.valueNullOrEmpty; diff --git a/src/main/java/org/simplejavamail/mailer/internal/mailsender/MailSender.java b/src/main/java/org/simplejavamail/mailer/internal/mailsender/MailSender.java index 211f696a2..4f0b3bfd5 100644 --- a/src/main/java/org/simplejavamail/mailer/internal/mailsender/MailSender.java +++ b/src/main/java/org/simplejavamail/mailer/internal/mailsender/MailSender.java @@ -2,8 +2,8 @@ import org.simplejavamail.MailException; import org.simplejavamail.email.Email; -import org.simplejavamail.internal.util.ConfigLoader; -import org.simplejavamail.internal.util.ConfigLoader.Property; +import org.simplejavamail.util.ConfigLoader; +import org.simplejavamail.util.ConfigLoader.Property; import org.simplejavamail.mailer.config.ProxyConfig; import org.simplejavamail.mailer.config.TransportStrategy; import org.simplejavamail.mailer.internal.socks.AuthenticatingSocks5Bridge; diff --git a/src/main/java/org/simplejavamail/internal/util/ConfigLoader.java b/src/main/java/org/simplejavamail/util/ConfigLoader.java similarity index 99% rename from src/main/java/org/simplejavamail/internal/util/ConfigLoader.java rename to src/main/java/org/simplejavamail/util/ConfigLoader.java index 18f6d699f..e0bbf48e0 100644 --- a/src/main/java/org/simplejavamail/internal/util/ConfigLoader.java +++ b/src/main/java/org/simplejavamail/util/ConfigLoader.java @@ -1,4 +1,4 @@ -package org.simplejavamail.internal.util; +package org.simplejavamail.util; import org.simplejavamail.mailer.config.TransportStrategy; import org.slf4j.Logger; diff --git a/src/main/java/org/simplejavamail/util/SimpleJavaMailSpringSupport.java b/src/main/java/org/simplejavamail/util/SimpleJavaMailSpringSupport.java new file mode 100644 index 000000000..5d2764d7c --- /dev/null +++ b/src/main/java/org/simplejavamail/util/SimpleJavaMailSpringSupport.java @@ -0,0 +1,78 @@ +package org.simplejavamail.util; + +import org.simplejavamail.mailer.Mailer; +import org.simplejavamail.util.ConfigLoader.Property; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +@Configuration +public class SimpleJavaMailSpringSupport { + + @Bean + public Mailer loadGlobalConfigAndCreateDefaultMailer( + // now obviously there are easier ways to do this, but this is the only way + // I can think of that actually works accross Spring versions + @Value("${simplejavamail.javaxmail.debug:#{null}}") String javaxmailDebug, + @Value("${simplejavamail.transportstrategy:#{null}}") String transportstrategy, + @Value("${simplejavamail.smtp.host:#{null}}") String smtpHost, + @Value("${simplejavamail.smtp.port:#{null}}") String smtpPort, + @Value("${simplejavamail.smtp.username:#{null}}") String smtpUsername, + @Value("${simplejavamail.smtp.password:#{null}}") String smtpPassword, + @Value("${simplejavamail.proxy.host:#{null}}") String proxyHost, + @Value("${simplejavamail.proxy.port:#{null}}") String proxyPort, + @Value("${simplejavamail.proxy.username:#{null}}") String proxyUsername, + @Value("${simplejavamail.proxy.password:#{null}}") String proxyPassword, + @Value("${simplejavamail.proxy.socks5bridge.port:#{null}}") String proxySocks5bridgePort, + @Value("${simplejavamail.defaults.subject:#{null}}") String defaultSubject, + @Value("${simplejavamail.defaults.from.name:#{null}}") String defaultFromName, + @Value("${simplejavamail.defaults.from.address:#{null}}") String defaultFromAddress, + @Value("${simplejavamail.defaults.replyto.name:#{null}}") String defaultReplytoName, + @Value("${simplejavamail.defaults.replyto.address:#{null}}") String defaultReplytoAddress, + @Value("${simplejavamail.defaults.to.name:#{null}}") String defaultToName, + @Value("${simplejavamail.defaults.to.address:#{null}}") String defaultToAddress, + @Value("${simplejavamail.defaults.cc.name:#{null}}") String defaultCcName, + @Value("${simplejavamail.defaults.cc.address:#{null}}") String defaultCcAddress, + @Value("${simplejavamail.defaults.bcc.name:#{null}}") String defaultBccName, + @Value("${simplejavamail.defaults.bcc.address:#{null}}") String defaultBccAddress, + @Value("${simplejavamail.defaults.poolsize:#{null}}") String defaultPoolsize) { + Properties emailProperties = new Properties(); + setNullableProperty(emailProperties, Property.JAVAXMAIL_DEBUG.key(), javaxmailDebug); + setNullableProperty(emailProperties, Property.TRANSPORT_STRATEGY.key(), transportstrategy); + setNullableProperty(emailProperties, Property.SMTP_HOST.key(), smtpHost); + setNullableProperty(emailProperties, Property.SMTP_PORT.key(), smtpPort); + setNullableProperty(emailProperties, Property.SMTP_USERNAME.key(), smtpUsername); + setNullableProperty(emailProperties, Property.SMTP_PASSWORD.key(), smtpPassword); + setNullableProperty(emailProperties, Property.PROXY_HOST.key(), proxyHost); + setNullableProperty(emailProperties, Property.PROXY_PORT.key(), proxyPort); + setNullableProperty(emailProperties, Property.PROXY_USERNAME.key(), proxyUsername); + setNullableProperty(emailProperties, Property.PROXY_PASSWORD.key(), proxyPassword); + setNullableProperty(emailProperties, Property.PROXY_SOCKS5BRIDGE_PORT.key(), proxySocks5bridgePort); + setNullableProperty(emailProperties, Property.DEFAULT_SUBJECT.key(), defaultSubject); + setNullableProperty(emailProperties, Property.DEFAULT_FROM_NAME.key(), defaultFromName); + setNullableProperty(emailProperties, Property.DEFAULT_FROM_ADDRESS.key(), defaultFromAddress); + setNullableProperty(emailProperties, Property.DEFAULT_REPLYTO_NAME.key(), defaultReplytoName); + setNullableProperty(emailProperties, Property.DEFAULT_REPLYTO_ADDRESS.key(), defaultReplytoAddress); + setNullableProperty(emailProperties, Property.DEFAULT_TO_NAME.key(), defaultToName); + setNullableProperty(emailProperties, Property.DEFAULT_TO_ADDRESS.key(), defaultToAddress); + setNullableProperty(emailProperties, Property.DEFAULT_CC_NAME.key(), defaultCcName); + setNullableProperty(emailProperties, Property.DEFAULT_CC_ADDRESS.key(), defaultCcAddress); + setNullableProperty(emailProperties, Property.DEFAULT_BCC_NAME.key(), defaultBccName); + setNullableProperty(emailProperties, Property.DEFAULT_BCC_ADDRESS.key(), defaultBccAddress); + setNullableProperty(emailProperties, Property.DEFAULT_POOL_SIZE.key(), defaultPoolsize); + + ConfigLoader.loadProperties(emailProperties, true); + + // this will configure itself with the global config and is read to use + // ofcourse this is optional simply as a convenience default + return new Mailer(); + } + + private void setNullableProperty(Properties emailProperties, String key, String value) { + if (value != null) { + emailProperties.setProperty(key, value); + } + } +} diff --git a/src/test/java/org/simplejavamail/email/EmailTest.java b/src/test/java/org/simplejavamail/email/EmailTest.java index 12e65c802..3c526910b 100644 --- a/src/test/java/org/simplejavamail/email/EmailTest.java +++ b/src/test/java/org/simplejavamail/email/EmailTest.java @@ -2,12 +2,9 @@ import org.junit.Before; import org.junit.Test; -import org.simplejavamail.internal.util.ConfigLoader; -import org.simplejavamail.mailer.Mailer; +import org.simplejavamail.util.ConfigLoader; import testutil.ConfigLoaderTestHelper; -import testutil.EmailHelper; -import javax.mail.internet.MimeMessage; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/src/test/java/org/simplejavamail/mailer/MailerTest.java b/src/test/java/org/simplejavamail/mailer/MailerTest.java index 2cf3b200b..974f79433 100644 --- a/src/test/java/org/simplejavamail/mailer/MailerTest.java +++ b/src/test/java/org/simplejavamail/mailer/MailerTest.java @@ -4,7 +4,7 @@ import org.junit.Before; import org.junit.Test; import org.simplejavamail.email.Email; -import org.simplejavamail.internal.util.ConfigLoader; +import org.simplejavamail.util.ConfigLoader; import org.simplejavamail.mailer.config.ProxyConfig; import org.simplejavamail.mailer.config.ServerConfig; import org.simplejavamail.mailer.config.TransportStrategy; diff --git a/src/test/java/org/simplejavamail/mailer/ProxyConfigTest.java b/src/test/java/org/simplejavamail/mailer/ProxyConfigTest.java index b90958149..e8c206866 100644 --- a/src/test/java/org/simplejavamail/mailer/ProxyConfigTest.java +++ b/src/test/java/org/simplejavamail/mailer/ProxyConfigTest.java @@ -2,7 +2,7 @@ import org.junit.Before; import org.junit.Test; -import org.simplejavamail.internal.util.ConfigLoader; +import org.simplejavamail.util.ConfigLoader; import org.simplejavamail.mailer.config.ProxyConfig; import testutil.ConfigLoaderTestHelper; diff --git a/src/test/java/org/simplejavamail/mailer/ServerConfigTest.java b/src/test/java/org/simplejavamail/mailer/ServerConfigTest.java index 8f2a4d141..ab9f9b4d8 100644 --- a/src/test/java/org/simplejavamail/mailer/ServerConfigTest.java +++ b/src/test/java/org/simplejavamail/mailer/ServerConfigTest.java @@ -2,7 +2,7 @@ import org.junit.Before; import org.junit.Test; -import org.simplejavamail.internal.util.ConfigLoader; +import org.simplejavamail.util.ConfigLoader; import org.simplejavamail.mailer.config.ServerConfig; import testutil.ConfigLoaderTestHelper; diff --git a/src/test/java/org/simplejavamail/internal/util/ConfigLoaderTest.java b/src/test/java/org/simplejavamail/util/ConfigLoaderTest.java similarity index 87% rename from src/test/java/org/simplejavamail/internal/util/ConfigLoaderTest.java rename to src/test/java/org/simplejavamail/util/ConfigLoaderTest.java index 62677cea3..a7fae8a59 100644 --- a/src/test/java/org/simplejavamail/internal/util/ConfigLoaderTest.java +++ b/src/test/java/org/simplejavamail/util/ConfigLoaderTest.java @@ -1,9 +1,9 @@ -package org.simplejavamail.internal.util; +package org.simplejavamail.util; import org.junit.Before; import org.junit.Test; -import org.simplejavamail.internal.util.ConfigLoader.Property; import org.simplejavamail.mailer.config.TransportStrategy; +import org.simplejavamail.util.ConfigLoader.Property; import testutil.ConfigLoaderTestHelper; import java.io.ByteArrayInputStream; @@ -13,8 +13,29 @@ import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; -import static org.simplejavamail.internal.util.ConfigLoader.Property.*; import static org.simplejavamail.mailer.config.TransportStrategy.SMTP_SSL; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_BCC_ADDRESS; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_BCC_NAME; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_CC_ADDRESS; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_CC_NAME; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_FROM_ADDRESS; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_FROM_NAME; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_REPLYTO_ADDRESS; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_REPLYTO_NAME; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_SUBJECT; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_TO_ADDRESS; +import static org.simplejavamail.util.ConfigLoader.Property.DEFAULT_TO_NAME; +import static org.simplejavamail.util.ConfigLoader.Property.JAVAXMAIL_DEBUG; +import static org.simplejavamail.util.ConfigLoader.Property.PROXY_HOST; +import static org.simplejavamail.util.ConfigLoader.Property.PROXY_PASSWORD; +import static org.simplejavamail.util.ConfigLoader.Property.PROXY_PORT; +import static org.simplejavamail.util.ConfigLoader.Property.PROXY_SOCKS5BRIDGE_PORT; +import static org.simplejavamail.util.ConfigLoader.Property.PROXY_USERNAME; +import static org.simplejavamail.util.ConfigLoader.Property.SMTP_HOST; +import static org.simplejavamail.util.ConfigLoader.Property.SMTP_PASSWORD; +import static org.simplejavamail.util.ConfigLoader.Property.SMTP_PORT; +import static org.simplejavamail.util.ConfigLoader.Property.SMTP_USERNAME; +import static org.simplejavamail.util.ConfigLoader.Property.TRANSPORT_STRATEGY; public class ConfigLoaderTest { diff --git a/src/test/java/testutil/ConfigLoaderTestHelper.java b/src/test/java/testutil/ConfigLoaderTestHelper.java index 772b5330c..89e15cd9a 100644 --- a/src/test/java/testutil/ConfigLoaderTestHelper.java +++ b/src/test/java/testutil/ConfigLoaderTestHelper.java @@ -1,7 +1,7 @@ package testutil; -import org.simplejavamail.internal.util.ConfigLoader; -import org.simplejavamail.internal.util.ConfigLoader.Property; +import org.simplejavamail.util.ConfigLoader; +import org.simplejavamail.util.ConfigLoader.Property; import java.lang.reflect.Field; import java.lang.reflect.Modifier;