From 6f31080f78a688592efbafd281fb1019a0293029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 2 Jul 2015 13:41:17 -0500 Subject: [PATCH] Add mail server connection check If a `JavaMailSenderImpl` is available, check that the underlying mail server is available on startup. Add a `spring.mail.test-connection` property to control this behaviour. Closes gh-3408 --- .../boot/autoconfigure/mail/MailProperties.java | 12 ++++++++++++ .../mail/MailSenderAutoConfiguration.java | 13 +++++++++++++ .../asciidoc/appendix-application-properties.adoc | 1 + 3 files changed, 26 insertions(+) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java index 5349a52a51..2d461c6b28 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java @@ -67,6 +67,11 @@ public class MailProperties { */ private String jndiName; + /** + * Ping to mail server while initializing. + */ + private boolean testConnection; + public String getHost() { return this.host; } @@ -119,4 +124,11 @@ public class MailProperties { return this.jndiName; } + public boolean isTestConnection() { + return this.testConnection; + } + + public void setTestConnection(boolean testConnection) { + this.testConnection = testConnection; + } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java index 640a39635f..1d90961acd 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Properties; import javax.activation.MimeType; +import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.MimeMessage; @@ -69,9 +70,21 @@ public class MailSenderAutoConfiguration { else { applyProperties(sender); } + validateConnection(sender); return sender; } + private void validateConnection(JavaMailSenderImpl sender) { + if (this.properties.isTestConnection()) { + try { + sender.testConnection(); + } catch (MessagingException ex) { + throw new IllegalStateException( + String.format("Unable to ping to %s", this.properties.getHost()), ex); + } + } + } + private void applyProperties(JavaMailSenderImpl sender) { sender.setHost(this.properties.getHost()); if (this.properties.getPort() != null) { diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 235545b4fa..74cf441ab0 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -519,6 +519,7 @@ content into your application; rather pick only the properties that you need. spring.mail.default-encoding=UTF-8 # encoding to use for MimeMessages spring.mail.properties.*= # properties to set on the JavaMail session spring.mail.jndi-name= # JNDI location of a Mail Session + spring.mail.test-connection= # Enable test connection. Default: false # SPRING BATCH ({sc-spring-boot-autoconfigure}/batch/BatchProperties.{sc-ext}[BatchProperties]) spring.batch.job.names=job1,job2