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
328e07eb
Commit
328e07eb
authored
Jun 02, 2015
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
polish mail jndi support
Closes gh-2419
parent
28cb13c3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
47 additions
and
59 deletions
+47
-59
JndiSessionConfiguration.java
...ork/boot/autoconfigure/mail/JndiSessionConfiguration.java
+11
-17
MailProperties.java
...ringframework/boot/autoconfigure/mail/MailProperties.java
+2
-2
MailSenderAutoConfiguration.java
.../boot/autoconfigure/mail/MailSenderAutoConfiguration.java
+15
-12
spring.factories
...utoconfigure/src/main/resources/META-INF/spring.factories
+0
-1
MailSenderAutoConfigurationTests.java
.../autoconfigure/mail/MailSenderAutoConfigurationTests.java
+18
-26
appendix-application-properties.adoc
...cs/src/main/asciidoc/appendix-application-properties.adoc
+1
-1
No files found.
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/Jndi
MailAuto
Configuration.java
→
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/Jndi
Session
Configuration.java
View file @
328e07eb
...
...
@@ -16,35 +16,30 @@
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.AutoConfigureBefore
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
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.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.jndi.JndiLocatorDelegate
;
import
javax.mail.Session
;
import
javax.naming.NamingException
;
/**
*
{@link EnableAutoConfiguration Auto-configuration} for Mail provided from
JNDI.
*
Auto-configure a {@link Session} available on
JNDI.
*
* @author Eddú Meléndez
* @author Stephane Nicoll
* @since 1.3.0
*/
@Configuration
@AutoConfigureBefore
(
MailSenderAutoConfiguration
.
class
)
@ConditionalOnClass
(
Session
.
class
)
@ConditionalOnMissingBean
(
Session
.
class
)
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name"
)
@EnableConfigurationProperties
(
MailProperties
.
class
)
@ConditionalOnJndi
public
class
JndiMailAuto
Configuration
{
class
JndiSession
Configuration
{
@Autowired
private
MailProperties
properties
;
...
...
@@ -54,13 +49,12 @@ public class JndiMailAutoConfiguration {
public
Session
session
()
{
try
{
return
new
JndiLocatorDelegate
()
.
lookup
(
this
.
properties
.
getJndiName
(),
Session
.
class
);
}
catch
(
NamingException
e
)
{
.
lookup
(
this
.
properties
.
getJndiName
(),
Session
.
class
);
}
catch
(
NamingException
e
)
{
throw
new
IllegalStateException
(
String
.
format
(
"Unable to find Session in JNDI location %s"
,
this
.
properties
.
getJndiName
()));
}
throw
new
IllegalStateException
(
String
.
format
(
"Unable to find Session in JNDI location %s"
,
this
.
properties
.
getJndiName
()));
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailProperties.java
View file @
328e07eb
/*
* Copyright 2012-201
4
the original author or authors.
* Copyright 2012-201
5
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.
...
...
@@ -63,7 +63,7 @@ public class MailProperties {
private
Map
<
String
,
String
>
properties
=
new
HashMap
<
String
,
String
>();
/**
*
JNDI location of the session. Host, port, username, password are ignored when set
.
*
Session JNDI name. When set, takes precedence to others mail settings
.
*/
private
String
jndiName
;
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfiguration.java
View file @
328e07eb
...
...
@@ -17,10 +17,9 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
mail
;
import
java.util.Properties
;
import
javax.activation.MimeType
;
import
javax.mail.internet.MimeMessage
;
import
javax.mail.Session
;
import
javax.mail.internet.MimeMessage
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
...
...
@@ -28,11 +27,12 @@ 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.
Properties
Condition
;
import
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration.
MailSender
Condition
;
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.mail.MailSender
;
import
org.springframework.mail.javamail.JavaMailSenderImpl
;
...
...
@@ -47,8 +47,9 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
@Configuration
@ConditionalOnClass
({
MimeMessage
.
class
,
MimeType
.
class
})
@ConditionalOnMissingBean
(
MailSender
.
class
)
@Conditional
(
Properties
Condition
.
class
)
@Conditional
(
MailSender
Condition
.
class
)
@EnableConfigurationProperties
(
MailProperties
.
class
)
@Import
(
JndiSessionConfiguration
.
class
)
public
class
MailSenderAutoConfiguration
{
@Autowired
(
required
=
false
)
...
...
@@ -62,7 +63,8 @@ public class MailSenderAutoConfiguration {
JavaMailSenderImpl
sender
=
new
JavaMailSenderImpl
();
if
(
this
.
session
!=
null
)
{
sender
.
setSession
(
this
.
session
);
}
else
{
}
else
{
sender
.
setHost
(
this
.
properties
.
getHost
());
if
(
this
.
properties
.
getPort
()
!=
null
)
{
sender
.
setPort
(
this
.
properties
.
getPort
());
...
...
@@ -80,22 +82,23 @@ public class MailSenderAutoConfiguration {
}
/**
* Condition for jndi-name or host property
* Condition to trigger the creation of a {@link JavaMailSenderImpl}. This kicks in
* if either the host or jndi name property is set.
*/
static
class
Properties
Condition
extends
AnyNestedCondition
{
static
class
MailSender
Condition
extends
AnyNestedCondition
{
public
Properties
Condition
()
{
public
MailSender
Condition
()
{
super
(
ConfigurationPhase
.
PARSE_CONFIGURATION
);
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name"
)
static
class
JndiNameProperty
{
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"host"
)
static
class
HostProperty
{
}
@ConditionalOnProperty
(
prefix
=
"spring.mail"
,
name
=
"jndi-name"
)
static
class
JndiNameProperty
{
}
}
}
spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
View file @
328e07eb
...
...
@@ -40,7 +40,6 @@ org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfigu
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.JndiMailAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mail/MailSenderAutoConfigurationTests.java
View file @
328e07eb
...
...
@@ -137,57 +137,49 @@ public class MailSenderAutoConfigurationTests {
}
@Test
public
void
sessionIsAvailableFromJndiAndJndiNameIsSet
()
throws
IllegalStateException
,
NamingException
{
Properties
properties
=
new
Properties
();
Session
session
=
Session
.
getDefaultInstance
(
properties
);
configureJndi
(
"foo"
,
session
);
load
(
JndiMailAutoConfiguration
.
class
,
"spring.mail.jndi-name:foo"
);
public
void
jndiSessionAvailable
()
throws
NamingException
{
Session
session
=
configureJndiSession
(
"foo"
);
load
(
EmptyConfig
.
class
,
"spring.mail.jndi-name:foo"
);
assertNotNull
(
this
.
context
.
getBean
(
Session
.
class
)
);
assertEquals
(
session
,
this
.
context
.
getBean
(
Session
.
class
)
);
assert
NotNull
(
this
.
context
.
getBean
(
JavaMailSender
.
class
));
Session
sessionBean
=
this
.
context
.
getBean
(
Session
.
class
);
assertEquals
(
session
,
sessionBean
);
assert
Equals
(
sessionBean
,
this
.
context
.
getBean
(
JavaMailSenderImpl
.
class
).
getSession
(
));
}
@Test
public
void
sessionIsAvailableFromJndiAndHostIsSet
()
throws
IllegalStateException
,
NamingException
{
Properties
properties
=
new
Properties
();
Session
session
=
Session
.
getDefaultInstance
(
properties
);
configureJndi
(
"foo"
,
session
);
public
void
jndiSessionIgnoredIfJndiNameNotSet
()
throws
NamingException
{
configureJndiSession
(
"foo"
);
load
(
JndiMailAutoConfiguration
.
class
,
"spring.mail.host:smtp.acme.org"
);
load
(
EmptyConfig
.
class
,
"spring.mail.host:smtp.acme.org"
);
assertEquals
(
0
,
this
.
context
.
getBeanNamesForType
(
Session
.
class
).
length
);
assertNotNull
(
this
.
context
.
getBean
(
JavaMailSender
.
class
));
}
@Test
public
void
sessionIsAvailableFromJndiAndPropertiesNotUsed
()
throws
IllegalStateException
,
NamingException
{
Properties
properties
=
new
Properties
();
Session
session
=
Session
.
getDefaultInstance
(
properties
);
configureJndi
(
"foo"
,
session
);
public
void
jndiSessionNotUsedIfJndiNameNotSet
()
throws
NamingException
{
configureJndiSession
(
"foo"
);
load
(
JndiMailAutoConfiguration
.
class
);
load
(
EmptyConfig
.
class
);
assertEquals
(
0
,
this
.
context
.
getBeanNamesForType
(
Session
.
class
).
length
);
assertEquals
(
0
,
this
.
context
.
getBeanNamesForType
(
JavaMailSender
.
class
).
length
);
}
@Test
public
void
sessionIsNotAvailableFromJndiAndJndiNameIsSet
()
throws
IllegalStateException
,
NamingException
{
public
void
jndiSessionNotAvailableWithJndiName
()
throws
NamingException
{
thrown
.
expect
(
BeanCreationException
.
class
);
thrown
.
expectMessage
(
"Unable to find Session in JNDI location foo"
);
load
(
JndiMailAutoConfiguration
.
class
,
"spring.mail.jndi-name:foo"
);
load
(
EmptyConfig
.
class
,
"spring.mail.jndi-name:foo"
);
}
private
void
configureJndi
(
String
name
,
Session
session
)
private
Session
configureJndiSession
(
String
name
)
throws
IllegalStateException
,
NamingException
{
Properties
properties
=
new
Properties
();
Session
session
=
Session
.
getDefaultInstance
(
properties
);
TestableInitialContextFactory
.
bind
(
name
,
session
);
return
session
;
}
private
void
load
(
Class
<?>
config
,
String
...
environment
)
{
...
...
spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
View file @
328e07eb
...
...
@@ -486,7 +486,7 @@ content into your application; rather pick only the properties that you need.
spring.mail.password=
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= #
For JNDI lookup (host, port, username & password are ignored when set)
spring.mail.jndi-name= #
JNDI location of a Mail Session
# 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