Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
17582de4
Commit
17582de4
authored
Jul 06, 2015
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3409 from eddumelendez/gh-3408
* pr/3409: Polish Add mail server connection check
parents
0eada5df
eb10275f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
145 additions
and
109 deletions
+145
-109
JndiSessionConfiguration.java
...ork/boot/autoconfigure/mail/JndiSessionConfiguration.java
+0
-60
MailProperties.java
...ringframework/boot/autoconfigure/mail/MailProperties.java
+12
-0
MailSenderAutoConfiguration.java
.../boot/autoconfigure/mail/MailSenderAutoConfiguration.java
+100
-48
MailSenderAutoConfigurationTests.java
.../autoconfigure/mail/MailSenderAutoConfigurationTests.java
+32
-1
appendix-application-properties.adoc
...cs/src/main/asciidoc/appendix-application-properties.adoc
+1
-0
No files found.
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/JndiSessionConfiguration.java
deleted
100644 → 0
View file @
0eada5df
/*
* Copyright 2012-2015 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
*
* http://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.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
mail
;
import
javax.mail.Session
;
import
javax.naming.NamingException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnJndi
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.jndi.JndiLocatorDelegate
;
/**
* Auto-configure a {@link Session} available on JNDI.
*
* @author Eddú Meléndez
* @author Stephane Nicoll
* @since 1.3.0
*/
@Configuration
@ConditionalOnClass
(
Session
.
class
)
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name"
)
@ConditionalOnJndi
class
JndiSessionConfiguration
{
@Autowired
private
MailProperties
properties
;
@Bean
@ConditionalOnMissingBean
public
Session
session
()
{
String
jndiName
=
this
.
properties
.
getJndiName
();
try
{
return
new
JndiLocatorDelegate
().
lookup
(
jndiName
,
Session
.
class
);
}
catch
(
NamingException
ex
)
{
throw
new
IllegalStateException
(
String
.
format
(
"Unable to find Session in JNDI location %s"
,
jndiName
),
ex
);
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java
View file @
17582de4
...
...
@@ -67,6 +67,11 @@ public class MailProperties {
*/
private
String
jndiName
;
/**
* Test that the mail server is available on startup.
*/
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
;
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java
View file @
17582de4
...
...
@@ -18,23 +18,26 @@ package org.springframework.boot.autoconfigure.mail;
import
java.util.Map
;
import
java.util.Properties
;
import
javax.activation.MimeType
;
import
javax.annotation.PostConstruct
;
import
javax.mail.MessagingException
;
import
javax.mail.Session
;
import
javax.mail.internet.MimeMessage
;
import
javax.naming.NamingException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.boot.autoconfigure.condition.AnyNestedCondition
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnJndi
;
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.autoconfigure.
condition.ConditionalOnSingleCandidate
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Conditional
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.
context.annotation.Import
;
import
org.springframework.
jndi.JndiLocatorDelegate
;
import
org.springframework.mail.MailSender
;
import
org.springframework.mail.javamail.JavaMailSenderImpl
;
...
...
@@ -48,67 +51,116 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
*/
@Configuration
@ConditionalOnClass
({
MimeMessage
.
class
,
MimeType
.
class
})
@ConditionalOnMissingBean
(
MailSender
.
class
)
@Conditional
(
MailSenderCondition
.
class
)
@EnableConfigurationProperties
(
MailProperties
.
class
)
@Import
(
JndiSessionConfiguration
.
class
)
public
class
MailSenderAutoConfiguration
{
@Autowired
(
required
=
false
)
private
Session
session
;
@Configuration
@ConditionalOnClass
(
Session
.
class
)
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name"
)
@ConditionalOnJndi
static
class
JndiSessionConfiguration
{
@Autowired
private
MailProperties
properties
;
@Bean
@ConditionalOnMissingBean
public
Session
session
()
{
String
jndiName
=
this
.
properties
.
getJndiName
();
try
{
return
new
JndiLocatorDelegate
().
lookup
(
jndiName
,
Session
.
class
);
}
catch
(
NamingException
ex
)
{
throw
new
IllegalStateException
(
String
.
format
(
"Unable to find Session in JNDI location %s"
,
jndiName
),
ex
);
}
}
@Autowired
private
MailProperties
properties
;
}
@Bean
public
JavaMailSenderImpl
mailSender
()
{
JavaMailSenderImpl
sender
=
new
JavaMailSenderImpl
();
if
(
this
.
session
!=
null
)
{
sender
.
setSession
(
this
.
session
);
@ConditionalOnMissingBean
(
MailSender
.
class
)
@Conditional
(
MailSenderConfiguration
.
MailSenderCondition
.
class
)
static
class
MailSenderConfiguration
{
@Autowired
private
MailProperties
properties
;
@Autowired
(
required
=
false
)
private
Session
session
;
@Bean
public
JavaMailSenderImpl
mailSender
()
{
JavaMailSenderImpl
sender
=
new
JavaMailSenderImpl
();
if
(
this
.
session
!=
null
)
{
sender
.
setSession
(
this
.
session
);
}
else
{
applyProperties
(
sender
);
}
return
sender
;
}
else
{
applyProperties
(
sender
);
}
return
sender
;
}
private
void
applyProperties
(
JavaMailSenderImpl
sender
)
{
sender
.
setHost
(
this
.
properties
.
getHost
());
if
(
this
.
properties
.
getPort
()
!=
null
)
{
sender
.
setPort
(
this
.
properties
.
getPort
());
private
void
applyProperties
(
JavaMailSenderImpl
sender
)
{
sender
.
setHost
(
this
.
properties
.
getHost
());
if
(
this
.
properties
.
getPort
()
!=
null
)
{
sender
.
setPort
(
this
.
properties
.
getPort
());
}
sender
.
setUsername
(
this
.
properties
.
getUsername
());
sender
.
setPassword
(
this
.
properties
.
getPassword
());
sender
.
setDefaultEncoding
(
this
.
properties
.
getDefaultEncoding
());
if
(!
this
.
properties
.
getProperties
().
isEmpty
())
{
sender
.
setJavaMailProperties
(
asProperties
(
this
.
properties
.
getProperties
()));
}
}
sender
.
setUsername
(
this
.
properties
.
getUsername
());
sender
.
setPassword
(
this
.
properties
.
getPassword
());
sender
.
setDefaultEncoding
(
this
.
properties
.
getDefaultEncoding
()
);
if
(!
this
.
properties
.
getProperties
().
isEmpty
())
{
sender
.
setJavaMailProperties
(
asProperties
(
this
.
properties
.
getProperties
()))
;
private
Properties
asProperties
(
Map
<
String
,
String
>
source
)
{
Properties
properties
=
new
Properties
(
);
properties
.
putAll
(
source
);
return
properties
;
}
}
private
Properties
asProperties
(
Map
<
String
,
String
>
source
)
{
Properties
properties
=
new
Properties
();
properties
.
putAll
(
source
);
return
properties
;
}
/**
* Condition to trigger the creation of a {@link JavaMailSenderImpl}. This kicks in if
* either the host or jndi name property is set.
*/
static
class
MailSenderCondition
extends
AnyNestedCondition
{
/**
* Condition to trigger the creation of a {@link JavaMailSenderImpl}. This kicks in if
* either the host or jndi name property is set.
*/
static
class
MailSenderCondition
extends
AnyNestedCondition
{
public
MailSenderCondition
()
{
super
(
ConfigurationPhase
.
PARSE_CONFIGURATION
);
}
public
MailSenderCondition
()
{
s
uper
(
ConfigurationPhase
.
PARSE_CONFIGURATION
);
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"host"
)
s
tatic
class
HostProperty
{
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"host
"
)
static
class
Host
Property
{
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name
"
)
static
class
JndiName
Property
{
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name"
)
static
class
JndiNameProperty
{
}
}
@Configuration
@ConditionalOnSingleCandidate
(
JavaMailSenderImpl
.
class
)
static
class
MailSenderValidator
{
@Autowired
private
MailProperties
properties
;
@Autowired
private
JavaMailSenderImpl
mailSender
;
@PostConstruct
public
void
validateConnection
()
{
if
(
this
.
properties
.
isTestConnection
())
{
try
{
this
.
mailSender
.
testConnection
();
}
catch
(
MessagingException
ex
)
{
throw
new
IllegalStateException
(
"Mail server is not unavailable"
,
ex
);
}
}
}
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java
View file @
17582de4
...
...
@@ -17,7 +17,7 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
mail
;
import
java.util.Properties
;
import
javax.mail.MessagingException
;
import
javax.mail.Session
;
import
javax.naming.Context
;
import
javax.naming.NamingException
;
...
...
@@ -40,6 +40,10 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
never
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
/**
* Tests for {@link MailSenderAutoConfiguration}.
...
...
@@ -170,6 +174,22 @@ public class MailSenderAutoConfigurationTests {
load
(
EmptyConfig
.
class
,
"spring.mail.jndi-name:foo"
);
}
@Test
public
void
connectionOnStartup
()
throws
MessagingException
{
load
(
MockMailConfiguration
.
class
,
"spring.mail.host:10.0.0.23"
,
"spring.mail.test-connection:true"
);
JavaMailSenderImpl
mailSender
=
this
.
context
.
getBean
(
JavaMailSenderImpl
.
class
);
verify
(
mailSender
,
times
(
1
)).
testConnection
();
}
@Test
public
void
connectionOnStartupNotCalled
()
throws
MessagingException
{
load
(
MockMailConfiguration
.
class
,
"spring.mail.host:10.0.0.23"
,
"spring.mail.test-connection:false"
);
JavaMailSenderImpl
mailSender
=
this
.
context
.
getBean
(
JavaMailSenderImpl
.
class
);
verify
(
mailSender
,
never
()).
testConnection
();
}
private
Session
configureJndiSession
(
String
name
)
throws
IllegalStateException
,
NamingException
{
Properties
properties
=
new
Properties
();
...
...
@@ -207,4 +227,15 @@ public class MailSenderAutoConfigurationTests {
}
@Configuration
static
class
MockMailConfiguration
{
@Bean
JavaMailSenderImpl
mockMailSender
()
{
return
mock
(
JavaMailSenderImpl
.
class
);
}
}
}
spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
View file @
17582de4
...
...
@@ -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=false # Test that the mail server is available on startup
# SPRING BATCH ({sc-spring-boot-autoconfigure}/batch/BatchProperties.{sc-ext}[BatchProperties])
spring.batch.job.names=job1,job2
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment