From cfabd67175765c311bc2dfcf342f586fe974da6c Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Mon, 17 Mar 2025 20:13:20 +0100 Subject: [PATCH] Create spring-boot-mail module See gh-46079 --- settings.gradle | 1 + .../build.gradle | 1 + ...ailHealthContributorAutoConfiguration.java | 2 +- ...althContributorAutoConfigurationTests.java | 2 +- ...itional-spring-configuration-metadata.json | 7 --- ...ot.autoconfigure.AutoConfiguration.imports | 2 - .../spring-boot-dependencies/build.gradle | 1 + .../spring-boot-docs/build.gradle | 2 + .../modules/reference/pages/io/email.adoc | 2 +- .../spring-boot-mail/build.gradle | 45 ++++++++++++++++++ ...nderAutoConfigurationIntegrationTests.java | 34 ++++++------- .../boot/mail/autoconfigure}/ssl/test-ca.crt | 0 .../boot/mail/autoconfigure}/ssl/test-ca.key | 0 .../mail/autoconfigure}/ssl/test-client.crt | 0 .../mail/autoconfigure}/ssl/test-client.key | 0 .../mail/autoconfigure}/ssl/test-server.crt | 0 .../mail/autoconfigure}/ssl/test-server.key | 0 .../mail/autoconfigure}/MailProperties.java | 2 +- .../MailSenderAutoConfiguration.java | 4 +- .../MailSenderJndiConfiguration.java | 2 +- .../MailSenderPropertiesConfiguration.java | 4 +- .../MailSenderValidatorAutoConfiguration.java | 2 +- .../mail/autoconfigure}/package-info.java | 2 +- ...itional-spring-configuration-metadata.json | 12 +++++ ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../MailSenderAutoConfigurationTests.java | 2 +- .../boot/mail/autoconfigure}/test.jks | Bin .../spring-boot-starter-mail/build.gradle | 3 +- 28 files changed, 94 insertions(+), 40 deletions(-) create mode 100644 spring-boot-project/spring-boot-mail/build.gradle rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/java/org/springframework/boot/mail/autoconfigure}/MailSenderAutoConfigurationIntegrationTests.java (87%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure}/ssl/test-ca.crt (100%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure}/ssl/test-ca.key (100%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure}/ssl/test-client.crt (100%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure}/ssl/test-client.key (100%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure}/ssl/test-server.crt (100%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure}/ssl/test-server.key (100%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure}/MailProperties.java (98%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure}/MailSenderAutoConfiguration.java (95%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure}/MailSenderJndiConfiguration.java (97%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure}/MailSenderPropertiesConfiguration.java (96%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure}/MailSenderValidatorAutoConfiguration.java (97%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure}/package-info.java (92%) create mode 100644 spring-boot-project/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json create mode 100644 spring-boot-project/spring-boot-mail/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/test/java/org/springframework/boot/mail/autoconfigure}/MailSenderAutoConfigurationTests.java (99%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/resources/org/springframework/boot/autoconfigure/mail => spring-boot-mail/src/test/resources/org/springframework/boot/mail/autoconfigure}/test.jks (100%) diff --git a/settings.gradle b/settings.gradle index b6c98b6b095..c67ddacefdf 100644 --- a/settings.gradle +++ b/settings.gradle @@ -67,6 +67,7 @@ include "spring-boot-project:spring-boot-docker-compose" include "spring-boot-project:spring-boot-docs" include "spring-boot-project:spring-boot-jackson" include "spring-boot-project:spring-boot-jetty" +include "spring-boot-project:spring-boot-mail" include "spring-boot-project:spring-boot-parent" include "spring-boot-project:spring-boot-reactor-netty" include "spring-boot-project:spring-boot-test" diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle index 7b125acb916..925ccdf3b3d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle @@ -36,6 +36,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-amqp")) optional(project(":spring-boot-project:spring-boot-jackson")) optional(project(":spring-boot-project:spring-boot-jetty")) + optional(project(":spring-boot-project:spring-boot-mail")) optional(project(":spring-boot-project:spring-boot-reactor-netty")) optional(project(":spring-boot-project:spring-boot-tomcat")) optional(project(":spring-boot-project:spring-boot-undertow")) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfiguration.java index d7f7d6c277c..d46a856f1d8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfiguration.java @@ -26,7 +26,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; +import org.springframework.boot.mail.autoconfigure.MailSenderAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.mail.javamail.JavaMailSenderImpl; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfigurationTests.java index 9b611ff4f70..127c099649c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthContributorAutoConfigurationTests.java @@ -21,7 +21,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.autoconfigure.health.HealthContributorAutoConfiguration; import org.springframework.boot.actuate.mail.MailHealthIndicator; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; +import org.springframework.boot.mail.autoconfigure.MailSenderAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 3e74cc732bf..6f85ed7a713 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1645,13 +1645,6 @@ "name": "spring.liquibase.ui-service", "defaultValue": "logger" }, - { - "name": "spring.mail.test-connection", - "description": "Whether to test that the mail server is available on startup.", - "sourceType": "org.springframework.boot.autoconfigure.mail.MailProperties", - "type": "java.lang.Boolean", - "defaultValue": false - }, { "name": "spring.mustache.prefix", "defaultValue": "classpath:/templates/" diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 3f5e1caab37..3b7b1f203ee 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -80,8 +80,6 @@ org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration -org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration -org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index d6b21b53da8..a23086cf3f7 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1999,6 +1999,7 @@ bom { "spring-boot-loader", "spring-boot-loader-classic", "spring-boot-loader-tools", + "spring-boot-mail", "spring-boot-properties-migrator", "spring-boot-reactor-netty", "spring-boot-starter", diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index 2615c462d6e..c4a75ac8e71 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -82,6 +82,7 @@ dependencies { autoConfiguration(project(path: ":spring-boot-project:spring-boot-devtools", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jackson", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "autoConfigurationMetadata")) + autoConfiguration(project(path: ":spring-boot-project:spring-boot-mail", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-reactor-netty", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-testcontainers", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-tomcat", configuration: "autoConfigurationMetadata")) @@ -97,6 +98,7 @@ dependencies { configurationProperties(project(path: ":spring-boot-project:spring-boot-docker-compose", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-jackson", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "configurationPropertiesMetadata")) + configurationProperties(project(path: ":spring-boot-project:spring-boot-mail", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-reactor-netty", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-test-autoconfigure", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-testcontainers", configuration: "configurationPropertiesMetadata")) diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/email.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/email.adoc index be4cc8b0450..2a995b4968a 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/email.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/email.adoc @@ -7,7 +7,7 @@ TIP: See the {url-spring-framework-docs}/integration/email.html[reference docume If `spring.mail.host` and the relevant libraries (as defined by `spring-boot-starter-mail`) are available, a default javadoc:org.springframework.mail.javamail.JavaMailSender[] is created if none exists. The sender can be further customized by configuration items from the `spring.mail` namespace. -See javadoc:org.springframework.boot.autoconfigure.mail.MailProperties[] for more details. +See javadoc:org.springframework.boot.mail.autoconfigure.MailProperties[] for more details. In particular, certain default timeout values are infinite, and you may want to change that to avoid having a thread blocked by an unresponsive mail server, as shown in the following example: diff --git a/spring-boot-project/spring-boot-mail/build.gradle b/spring-boot-project/spring-boot-mail/build.gradle new file mode 100644 index 00000000000..46ef46db856 --- /dev/null +++ b/spring-boot-project/spring-boot-mail/build.gradle @@ -0,0 +1,45 @@ +/* + * Copyright 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +plugins { + id "java-library" + id "org.springframework.boot.auto-configuration" + id "org.springframework.boot.configuration-properties" + id "org.springframework.boot.docker-test" + id "org.springframework.boot.deployed" + id "org.springframework.boot.optional-dependencies" +} + +description = "Spring Boot Mail" + +dependencies { + api(project(":spring-boot-project:spring-boot")) + api("org.springframework:spring-context-support") + api("org.eclipse.angus:jakarta.mail") + + optional(project(":spring-boot-project:spring-boot-autoconfigure")) + + dockerTestImplementation(project(":spring-boot-project:spring-boot-test")) + dockerTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support-docker")) + dockerTestImplementation("org.testcontainers:testcontainers") + dockerTestImplementation("org.testcontainers:junit-jupiter") + + testImplementation(project(":spring-boot-project:spring-boot-test")) + testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) + testImplementation(testFixtures(project(":spring-boot-project:spring-boot-autoconfigure"))) + testRuntimeOnly("ch.qos.logback:logback-classic") +} diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationIntegrationTests.java b/spring-boot-project/spring-boot-mail/src/dockerTest/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfigurationIntegrationTests.java similarity index 87% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationIntegrationTests.java rename to spring-boot-project/spring-boot-mail/src/dockerTest/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfigurationIntegrationTests.java index 92288768f6d..3424ce816a9 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationIntegrationTests.java +++ b/spring-boot-project/spring-boot-mail/src/dockerTest/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfigurationIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import java.net.SocketTimeoutException; import java.security.cert.CertPathBuilderException; @@ -95,9 +95,9 @@ class MailSenderAutoConfigurationIntegrationTests { private static final MailpitContainer mailpit = TestImage.container(MailpitContainer.class) .withSmtpRequireTls(true) .withSmtpTlsCert(MountableFile - .forClasspathResource("/org/springframework/boot/autoconfigure/mail/ssl/test-server.crt")) + .forClasspathResource("/org/springframework/boot/mail/autoconfigure/ssl/test-server.crt")) .withSmtpTlsKey(MountableFile - .forClasspathResource("/org/springframework/boot/autoconfigure/mail/ssl/test-server.key")) + .forClasspathResource("/org/springframework/boot/mail/autoconfigure/ssl/test-server.key")) .withPop3Auth("user:pass"); private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() @@ -108,9 +108,9 @@ class MailSenderAutoConfigurationIntegrationTests { this.contextRunner.withPropertyValues("spring.mail.host:" + mailpit.getHost(), "spring.mail.port:" + mailpit.getSmtpPort(), "spring.mail.ssl.enabled:true", "spring.mail.ssl.bundle:test-bundle", - "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-ca.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.key", + "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-ca.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.key", "spring.mail.properties.mail.pop3.host:" + mailpit.getHost(), "spring.mail.properties.mail.pop3.port:" + mailpit.getPop3Port()) .run((context) -> { @@ -137,9 +137,9 @@ class MailSenderAutoConfigurationIntegrationTests { this.contextRunner.withPropertyValues("spring.mail.host:" + mailpit.getHost(), "spring.mail.port:" + mailpit.getSmtpPort(), "spring.mail.properties.mail.smtp.timeout:1000", "spring.mail.ssl.bundle:test-bundle", - "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-ca.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.key") + "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-ca.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.key") .run((context) -> { JavaMailSenderImpl mailSender = context.getBean(JavaMailSenderImpl.class); assertThatException().isThrownBy(() -> mailSender.send(createMessage("Should fail"))) @@ -156,9 +156,9 @@ class MailSenderAutoConfigurationIntegrationTests { private static final MailpitContainer mailpit = TestImage.container(MailpitContainer.class) .withSmtpRequireStarttls(true) .withSmtpTlsCert(MountableFile - .forClasspathResource("/org/springframework/boot/autoconfigure/mail/ssl/test-server.crt")) + .forClasspathResource("/org/springframework/boot/mail/autoconfigure/ssl/test-server.crt")) .withSmtpTlsKey(MountableFile - .forClasspathResource("/org/springframework/boot/autoconfigure/mail/ssl/test-server.key")) + .forClasspathResource("/org/springframework/boot/mail/autoconfigure/ssl/test-server.key")) .withPop3Auth("user:pass"); final ApplicationContextRunner contextRunner = new ApplicationContextRunner() @@ -170,9 +170,9 @@ class MailSenderAutoConfigurationIntegrationTests { "spring.mail.port:" + mailpit.getSmtpPort(), "spring.mail.properties.mail.smtp.starttls.enable:true", "spring.mail.properties.mail.smtp.starttls.required:true", "spring.mail.ssl.bundle:test-bundle", - "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-ca.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.key", + "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-ca.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.key", "spring.mail.properties.mail.pop3.host:" + mailpit.getHost(), "spring.mail.properties.mail.pop3.port:" + mailpit.getPop3Port()) .run((context) -> { @@ -188,9 +188,9 @@ class MailSenderAutoConfigurationIntegrationTests { "spring.mail.port:" + mailpit.getSmtpPort(), "spring.mail.ssl.enabled:true", "spring.mail.properties.mail.smtp.starttls.enable:true", "spring.mail.properties.mail.smtp.starttls.required:true", "spring.mail.ssl.bundle:test-bundle", - "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-ca.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.crt", - "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/autoconfigure/mail/ssl/test-client.key", + "spring.ssl.bundle.pem.test-bundle.truststore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-ca.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.certificate=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.crt", + "spring.ssl.bundle.pem.test-bundle.keystore.private-key=classpath:org/springframework/boot/mail/autoconfigure/ssl/test-client.key", "spring.mail.properties.mail.pop3.host:" + mailpit.getHost(), "spring.mail.properties.mail.pop3.port:" + mailpit.getPop3Port()) .run((context) -> { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-ca.crt b/spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-ca.crt similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-ca.crt rename to spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-ca.crt diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-ca.key b/spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-ca.key similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-ca.key rename to spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-ca.key diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-client.crt b/spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-client.crt similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-client.crt rename to spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-client.crt diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-client.key b/spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-client.key similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-client.key rename to spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-client.key diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-server.crt b/spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-server.crt similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-server.crt rename to spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-server.crt diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-server.key b/spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-server.key similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/dockerTest/resources/org/springframework/boot/autoconfigure/mail/ssl/test-server.key rename to spring-boot-project/spring-boot-mail/src/dockerTest/resources/org/springframework/boot/mail/autoconfigure/ssl/test-server.key diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailProperties.java similarity index 98% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java rename to spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailProperties.java index caf9fd877d0..f19fb68705f 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java +++ b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfiguration.java similarity index 95% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java rename to spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfiguration.java index b47734ce1b9..f60ea4ecd58 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java +++ b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import jakarta.activation.MimeType; import jakarta.mail.internet.MimeMessage; @@ -25,8 +25,8 @@ import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration.MailSenderCondition; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.mail.autoconfigure.MailSenderAutoConfiguration.MailSenderCondition; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Import; import org.springframework.mail.MailSender; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderJndiConfiguration.java b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderJndiConfiguration.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderJndiConfiguration.java rename to spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderJndiConfiguration.java index 6ddda8276ba..37e2871194b 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderJndiConfiguration.java +++ b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderJndiConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import javax.naming.NamingException; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderPropertiesConfiguration.java similarity index 96% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java rename to spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderPropertiesConfiguration.java index e872fe8332e..360d0e1b83c 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderPropertiesConfiguration.java +++ b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderPropertiesConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import java.util.Map; import java.util.Properties; @@ -22,7 +22,7 @@ import java.util.Properties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.mail.MailProperties.Ssl; +import org.springframework.boot.mail.autoconfigure.MailProperties.Ssl; import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.ssl.SslBundles; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderValidatorAutoConfiguration.java b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderValidatorAutoConfiguration.java similarity index 97% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderValidatorAutoConfiguration.java rename to spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderValidatorAutoConfiguration.java index 1cca661f1cf..f9374105301 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderValidatorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/MailSenderValidatorAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import jakarta.mail.MessagingException; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/package-info.java b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/package-info.java similarity index 92% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/package-info.java rename to spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/package-info.java index d900682baa3..7942cfc8232 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/mail/package-info.java +++ b/spring-boot-project/spring-boot-mail/src/main/java/org/springframework/boot/mail/autoconfigure/package-info.java @@ -17,4 +17,4 @@ /** * Auto-configuration for email support. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; diff --git a/spring-boot-project/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000000..afaa4a442a1 --- /dev/null +++ b/spring-boot-project/spring-boot-mail/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,12 @@ +{ + "groups": [], + "properties": [ + { + "name": "spring.mail.test-connection", + "description": "Whether to test that the mail server is available on startup.", + "sourceType": "org.springframework.boot.autoconfigure.mail.MailProperties", + "type": "java.lang.Boolean", + "defaultValue": false + } + ] +} \ No newline at end of file diff --git a/spring-boot-project/spring-boot-mail/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-mail/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000000..2fc32ec4686 --- /dev/null +++ b/spring-boot-project/spring-boot-mail/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +org.springframework.boot.mail.autoconfigure.MailSenderAutoConfiguration +org.springframework.boot.mail.autoconfigure.MailSenderValidatorAutoConfiguration \ No newline at end of file diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java b/spring-boot-project/spring-boot-mail/src/test/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfigurationTests.java similarity index 99% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java rename to spring-boot-project/spring-boot-mail/src/test/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfigurationTests.java index b2ae3f3647b..7b44e26a7e8 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-mail/src/test/java/org/springframework/boot/mail/autoconfigure/MailSenderAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.mail; +package org.springframework.boot.mail.autoconfigure; import java.util.Properties; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/resources/org/springframework/boot/autoconfigure/mail/test.jks b/spring-boot-project/spring-boot-mail/src/test/resources/org/springframework/boot/mail/autoconfigure/test.jks similarity index 100% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/resources/org/springframework/boot/autoconfigure/mail/test.jks rename to spring-boot-project/spring-boot-mail/src/test/resources/org/springframework/boot/mail/autoconfigure/test.jks diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle index 330958ec564..e076e961f7b 100644 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-mail/build.gradle @@ -22,6 +22,5 @@ description = "Starter for using Java Mail and Spring Framework's email sending dependencies { api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter")) - api("org.springframework:spring-context-support") - api("org.eclipse.angus:jakarta.mail") + api(project(":spring-boot-project:spring-boot-mail")) }