Skip to content
This repository was archived by the owner on Jan 19, 2022. It is now read-only.

Commit a348693

Browse files
committed
Add ses module
1 parent 641a6b8 commit a348693

File tree

16 files changed

+1218
-6
lines changed

16 files changed

+1218
-6
lines changed

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@
6060
<module>spring-cloud-aws-autoconfigure</module>
6161
<module>spring-cloud-aws-parameter-store-config</module>
6262
<module>spring-cloud-aws-secrets-manager-config</module>
63+
<module>spring-cloud-aws-ses</module>
6364
<module>spring-cloud-starter-aws</module>
6465
<module>spring-cloud-starter-aws-jdbc</module>
6566
<module>spring-cloud-starter-aws-messaging</module>
6667
<module>spring-cloud-starter-aws-parameter-store-config</module>
6768
<module>spring-cloud-starter-aws-secrets-manager-config</module>
69+
<module>spring-cloud-starter-aws-ses</module>
6870
<module>spring-cloud-aws-integration-test</module>
6971
<module>docs</module>
7072
</modules>

spring-cloud-aws-autoconfigure/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@
4848
<artifactId>spring-cloud-aws-parameter-store-config</artifactId>
4949
<optional>true</optional>
5050
</dependency>
51+
<dependency>
52+
<groupId>org.springframework.cloud</groupId>
53+
<artifactId>spring-cloud-aws-ses</artifactId>
54+
<optional>true</optional>
55+
</dependency>
5156
<dependency>
5257
<groupId>org.springframework.boot</groupId>
5358
<artifactId>spring-boot-autoconfigure</artifactId>
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright 2013-2020 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.cloud.aws.autoconfigure.mail;
18+
19+
import javax.mail.Session;
20+
21+
import com.amazonaws.auth.AWSCredentialsProvider;
22+
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
23+
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;
24+
25+
import org.springframework.beans.factory.ObjectProvider;
26+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
28+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
29+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
30+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
31+
import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration;
32+
import org.springframework.cloud.aws.autoconfigure.context.ContextCredentialsAutoConfiguration;
33+
import org.springframework.cloud.aws.context.annotation.ConditionalOnMissingAmazonClient;
34+
import org.springframework.cloud.aws.core.config.AmazonWebserviceClientFactoryBean;
35+
import org.springframework.cloud.aws.core.region.RegionProvider;
36+
import org.springframework.cloud.aws.ses.SimpleEmailServiceJavaMailSender;
37+
import org.springframework.cloud.aws.ses.SimpleEmailServiceMailSender;
38+
import org.springframework.context.annotation.Bean;
39+
import org.springframework.context.annotation.Configuration;
40+
import org.springframework.context.annotation.Import;
41+
import org.springframework.mail.MailSender;
42+
import org.springframework.mail.javamail.JavaMailSender;
43+
44+
/**
45+
* @author Agim Emruli
46+
* @author Eddú Meléndez
47+
*/
48+
@Configuration(proxyBeanMethods = false)
49+
@AutoConfigureAfter(MailSenderAutoConfiguration.class)
50+
@ConditionalOnClass({ AmazonSimpleEmailService.class, MailSender.class })
51+
@ConditionalOnMissingBean(MailSender.class)
52+
@Import(ContextCredentialsAutoConfiguration.class)
53+
@ConditionalOnProperty(name = "spring.cloud.aws.ses.enabled", havingValue = "true",
54+
matchIfMissing = true)
55+
public class SesAutoConfiguration {
56+
57+
private final AWSCredentialsProvider credentialsProvider;
58+
59+
private final RegionProvider regionProvider;
60+
61+
public SesAutoConfiguration(ObjectProvider<RegionProvider> regionProvider,
62+
ObjectProvider<AWSCredentialsProvider> credentialsProvider) {
63+
this.credentialsProvider = credentialsProvider.getIfAvailable();
64+
this.regionProvider = regionProvider.getIfAvailable();
65+
}
66+
67+
@Bean
68+
@ConditionalOnMissingAmazonClient(AmazonSimpleEmailService.class)
69+
public AmazonWebserviceClientFactoryBean<AmazonSimpleEmailServiceClient> amazonSimpleEmailService() {
70+
return new AmazonWebserviceClientFactoryBean<>(
71+
AmazonSimpleEmailServiceClient.class, this.credentialsProvider,
72+
this.regionProvider);
73+
}
74+
75+
@Bean
76+
@ConditionalOnMissingClass("javax.mail.Session")
77+
public MailSender simpleMailSender(
78+
AmazonSimpleEmailService amazonSimpleEmailService) {
79+
return new SimpleEmailServiceMailSender(amazonSimpleEmailService);
80+
}
81+
82+
@Bean
83+
@ConditionalOnClass(Session.class)
84+
public JavaMailSender javaMailSender(
85+
AmazonSimpleEmailService amazonSimpleEmailService) {
86+
return new SimpleEmailServiceJavaMailSender(amazonSimpleEmailService);
87+
}
88+
89+
}

spring-cloud-aws-autoconfigure/src/main/java/org/springframework/cloud/aws/autoconfigure/mail/SimpleEmailAutoConfiguration.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,26 @@
5454
matchIfMissing = true)
5555
public class SimpleEmailAutoConfiguration {
5656

57+
private final AWSCredentialsProvider credentialsProvider;
58+
5759
private final RegionProvider regionProvider;
5860

59-
public SimpleEmailAutoConfiguration(ObjectProvider<RegionProvider> regionProvider) {
61+
public SimpleEmailAutoConfiguration(ObjectProvider<RegionProvider> regionProvider,
62+
ObjectProvider<AWSCredentialsProvider> credentialsProvider) {
63+
this.credentialsProvider = credentialsProvider.getIfAvailable();
6064
this.regionProvider = regionProvider.getIfAvailable();
6165
}
6266

6367
@Bean
6468
@ConditionalOnMissingAmazonClient(AmazonSimpleEmailService.class)
65-
public AmazonWebserviceClientFactoryBean<AmazonSimpleEmailServiceClient> amazonSimpleEmailService(
66-
AWSCredentialsProvider credentialsProvider) {
69+
public AmazonWebserviceClientFactoryBean<AmazonSimpleEmailServiceClient> amazonSimpleEmailService() {
6770
return new AmazonWebserviceClientFactoryBean<>(
68-
AmazonSimpleEmailServiceClient.class, credentialsProvider,
71+
AmazonSimpleEmailServiceClient.class, this.credentialsProvider,
6972
this.regionProvider);
7073
}
7174

7275
@Bean
73-
@ConditionalOnMissingClass("org.springframework.cloud.aws.mail.simplemail.SimpleEmailServiceJavaMailSender")
76+
@ConditionalOnMissingClass("javax.mail.Session")
7477
public MailSender simpleMailSender(
7578
AmazonSimpleEmailService amazonSimpleEmailService) {
7679
return new SimpleEmailServiceMailSender(amazonSimpleEmailService);

spring-cloud-aws-autoconfigure/src/main/resources/META-INF/spring.factories

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ org.springframework.cloud.aws.autoconfigure.context.ContextResourceLoaderAutoCon
66
org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration,\
77
org.springframework.cloud.aws.autoconfigure.mail.SimpleEmailAutoConfiguration,\
88
org.springframework.cloud.aws.autoconfigure.cache.ElastiCacheAutoConfiguration,\
9+
org.springframework.cloud.aws.autoconfigure.mail.SesAutoConfiguration,\
910
org.springframework.cloud.aws.autoconfigure.messaging.SqsAutoConfiguration,\
1011
org.springframework.cloud.aws.autoconfigure.messaging.SnsAutoConfiguration,\
1112
org.springframework.cloud.aws.autoconfigure.jdbc.AmazonRdsDatabaseAutoConfiguration,\
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright 2013-2020 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.cloud.aws.autoconfigure.mail;
18+
19+
import org.junit.jupiter.api.Test;
20+
21+
import org.springframework.boot.autoconfigure.AutoConfigurations;
22+
import org.springframework.boot.test.context.FilteredClassLoader;
23+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
24+
import org.springframework.cloud.aws.ses.SimpleEmailServiceJavaMailSender;
25+
import org.springframework.cloud.aws.ses.SimpleEmailServiceMailSender;
26+
import org.springframework.mail.MailSender;
27+
import org.springframework.mail.javamail.JavaMailSender;
28+
29+
import static org.assertj.core.api.Assertions.assertThat;
30+
31+
class SesAutoConfigurationTest {
32+
33+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
34+
.withConfiguration(AutoConfigurations.of(SesAutoConfiguration.class));
35+
36+
@Test
37+
void mailSenderWithJavaMail() {
38+
this.contextRunner.run(context -> {
39+
assertThat(context.getBean(MailSender.class)).isNotNull();
40+
assertThat(context.getBean(JavaMailSender.class)).isNotNull();
41+
assertThat(context.getBean(JavaMailSender.class))
42+
.isSameAs(context.getBean(MailSender.class));
43+
});
44+
}
45+
46+
@Test
47+
void mailSenderWithSimpleEmail() {
48+
this.contextRunner.withClassLoader(new FilteredClassLoader("javax.mail.Session"))
49+
.run(context -> {
50+
assertThat(context.getBean(MailSender.class)).isNotNull();
51+
assertThat(context.getBean("simpleMailSender"))
52+
.isNotNull();
53+
assertThat(context.getBean("simpleMailSender"))
54+
.isSameAs(context.getBean(MailSender.class));
55+
});
56+
}
57+
58+
@Test
59+
void mailIsDisabled() {
60+
this.contextRunner.withPropertyValues("spring.cloud.aws.ses.enabled:false")
61+
.run(context -> {
62+
assertThat(context).doesNotHaveBean(MailSender.class);
63+
assertThat(context).doesNotHaveBean(JavaMailSender.class);
64+
});
65+
}
66+
67+
}

spring-cloud-aws-autoconfigure/src/test/java/org/springframework/cloud/aws/autoconfigure/mail/SimpleEmailAutoConfigurationTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.springframework.boot.autoconfigure.AutoConfigurations;
2222
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
23+
import org.springframework.cloud.aws.mail.simplemail.SimpleEmailServiceJavaMailSender;
2324
import org.springframework.mail.MailSender;
2425
import org.springframework.mail.javamail.JavaMailSender;
2526

@@ -31,7 +32,7 @@ class SimpleEmailAutoConfigurationTest {
3132
.withConfiguration(AutoConfigurations.of(SimpleEmailAutoConfiguration.class));
3233

3334
@Test
34-
public void mailSender_MailSenderWithJava_configuresJavaMailSender() {
35+
void mailSender_MailSenderWithJava_configuresJavaMailSender() {
3536
this.contextRunner.run(context -> {
3637
assertThat(context.getBean(MailSender.class)).isNotNull();
3738
assertThat(context.getBean(JavaMailSender.class)).isNotNull();
@@ -40,6 +41,17 @@ public void mailSender_MailSenderWithJava_configuresJavaMailSender() {
4041
});
4142
}
4243

44+
@Test
45+
void mailSenderWithSimpleEmail() {
46+
this.contextRunner.run(context -> {
47+
assertThat(context.getBean(MailSender.class)).isNotNull();
48+
assertThat(context.getBean(SimpleEmailServiceJavaMailSender.class))
49+
.isNotNull();
50+
assertThat(context.getBean(SimpleEmailServiceJavaMailSender.class))
51+
.isSameAs(context.getBean(MailSender.class));
52+
});
53+
}
54+
4355
@Test
4456
void mailIsDisabled() {
4557
this.contextRunner.withPropertyValues("cloud.aws.mail.enabled:false")

spring-cloud-aws-context/src/main/java/org/springframework/cloud/aws/mail/simplemail/SimpleEmailServiceJavaMailSender.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
*
5757
* @author Agim Emruli
5858
* @since 1.0
59+
* @deprecated Use `spring-cloud-starter-aws-ses`
5960
*/
6061
public class SimpleEmailServiceJavaMailSender extends SimpleEmailServiceMailSender
6162
implements JavaMailSender {

spring-cloud-aws-context/src/main/java/org/springframework/cloud/aws/mail/simplemail/SimpleEmailServiceMailSender.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
* text body.
4545
*
4646
* @author Agim Emruli
47+
* @deprecated Use `spring-cloud-starter-aws-ses`
4748
*/
4849
public class SimpleEmailServiceMailSender implements MailSender, DisposableBean {
4950

spring-cloud-aws-dependencies/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@
104104
<artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
105105
<version>${project.version}</version>
106106
</dependency>
107+
<dependency>
108+
<groupId>org.springframework.cloud</groupId>
109+
<artifactId>spring-cloud-starter-aws-ses</artifactId>
110+
<version>${project.version}</version>
111+
</dependency>
107112
<dependency>
108113
<groupId>org.springframework.cloud</groupId>
109114
<artifactId>spring-cloud-aws-context</artifactId>
@@ -139,6 +144,11 @@
139144
<artifactId>spring-cloud-aws-secrets-manager-config</artifactId>
140145
<version>${project.version}</version>
141146
</dependency>
147+
<dependency>
148+
<groupId>org.springframework.cloud</groupId>
149+
<artifactId>spring-cloud-aws-ses</artifactId>
150+
<version>${project.version}</version>
151+
</dependency>
142152
</dependencies>
143153
</dependencyManagement>
144154
<profiles>

0 commit comments

Comments
 (0)