public class JavaMailSenderImpl extends java.lang.Object implements JavaMailSender
JavaMailSender
interface,
supporting both JavaMail MimeMessages
and Spring
SimpleMailMessages
. Can also be used as a
plain MailSender
implementation.
Allows for defining all settings locally as bean properties.
Alternatively, a pre-configured JavaMail javax.mail.Session
can be
specified, possibly pulled from an application server's JNDI environment.
Non-default properties in this object will always override the settings
in the JavaMail Session
. Note that if overriding all values locally,
there is no added value in setting a pre-configured Session
.
javax.mail.internet.MimeMessage
,
javax.mail.Session
,
setSession(Session)
,
setJavaMailProperties(java.util.Properties)
,
setHost(java.lang.String)
,
setPort(int)
,
setUsername(java.lang.String)
,
setPassword(java.lang.String)
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_PORT
The default port: -1.
|
static java.lang.String |
DEFAULT_PROTOCOL
The default protocol: 'smtp'.
|
private java.lang.String |
defaultEncoding |
private javax.activation.FileTypeMap |
defaultFileTypeMap |
private static java.lang.String |
HEADER_MESSAGE_ID |
private java.lang.String |
host |
private java.util.Properties |
javaMailProperties |
private java.lang.String |
password |
private int |
port |
private java.lang.String |
protocol |
private Session |
session |
private java.lang.String |
username |
Constructor and Description |
---|
JavaMailSenderImpl()
Create a new instance of the
JavaMailSenderImpl class. |
Modifier and Type | Method and Description |
---|---|
protected Transport |
connectTransport()
Obtain and connect a Transport from the underlying JavaMail Session,
passing in the specified host, port, username, and password.
|
MimeMessage |
createMimeMessage()
This implementation creates a SmartMimeMessage, holding the specified
default encoding and default FileTypeMap.
|
MimeMessage |
createMimeMessage(java.io.InputStream contentStream)
Create a new JavaMail MimeMessage for the underlying JavaMail Session
of this sender, using the given input stream as the message source.
|
protected void |
doSend(MimeMessage[] mimeMessages,
java.lang.Object[] originalMessages)
Actually send the given array of MimeMessages via JavaMail.
|
java.lang.String |
getDefaultEncoding()
Return the default encoding for
MimeMessages ,
or null if none. |
javax.activation.FileTypeMap |
getDefaultFileTypeMap()
Return the default Java Activation
FileTypeMap for
MimeMessages , or null if none. |
java.lang.String |
getHost()
Return the mail server host.
|
java.util.Properties |
getJavaMailProperties()
Allow Map access to the JavaMail properties of this sender,
with the option to add or override specific entries.
|
java.lang.String |
getPassword()
Return the password for the account at the mail host.
|
int |
getPort()
Return the mail server port.
|
java.lang.String |
getProtocol()
Return the mail protocol.
|
Session |
getSession()
Return the JavaMail
Session ,
lazily initializing it if hasn't been specified explicitly. |
protected Transport |
getTransport(Session session)
Obtain a Transport object from the given JavaMail Session,
using the configured protocol.
|
java.lang.String |
getUsername()
Return the username for the account at the mail host.
|
void |
send(MimeMessage... mimeMessages)
Send the given JavaMail MIME message.
|
void |
send(MimeMessage mimeMessage)
Send the given JavaMail MIME message.
|
void |
send(SimpleMailMessage... simpleMessages)
Send the given JavaMail MIME message.
|
void |
send(SimpleMailMessage simpleMessage)
Send the given JavaMail MIME message.
|
void |
setDefaultEncoding(java.lang.String defaultEncoding)
Set the default encoding to use for
MimeMessages
created by this instance. |
void |
setDefaultFileTypeMap(javax.activation.FileTypeMap defaultFileTypeMap)
Set the default Java Activation
FileTypeMap to use for
MimeMessages created by this instance. |
void |
setHost(java.lang.String host)
Set the mail server host, typically an SMTP host.
|
void |
setJavaMailProperties(java.util.Properties javaMailProperties)
Set JavaMail properties for the
Session . |
void |
setPassword(java.lang.String password)
Set the password for the account at the mail host, if any.
|
void |
setPort(int port)
Set the mail server port.
|
void |
setProtocol(java.lang.String protocol)
Set the mail protocol.
|
void |
setSession(Session session)
Set the JavaMail
Session , possibly pulled from JNDI. |
void |
setUsername(java.lang.String username)
Set the username for the account at the mail host, if any.
|
void |
testConnection()
Validate that this instance can connect to the server that it is configured
for.
|
public static final java.lang.String DEFAULT_PROTOCOL
public static final int DEFAULT_PORT
private static final java.lang.String HEADER_MESSAGE_ID
private java.util.Properties javaMailProperties
@Nullable private Session session
@Nullable private java.lang.String protocol
@Nullable private java.lang.String host
private int port
@Nullable private java.lang.String username
@Nullable private java.lang.String password
@Nullable private java.lang.String defaultEncoding
@Nullable private javax.activation.FileTypeMap defaultFileTypeMap
public JavaMailSenderImpl()
JavaMailSenderImpl
class.
Initializes the "defaultFileTypeMap"
property with a default ConfigurableMimeFileTypeMap
.
public void setJavaMailProperties(java.util.Properties javaMailProperties)
Session
.
A new Session
will be created with those properties.
Use either this method or setSession(Session)
, but not both.
Non-default properties in this instance will override given JavaMail properties.
public java.util.Properties getJavaMailProperties()
Useful for specifying entries directly, for example via "javaMailProperties[mail.smtp.auth]".
public void setSession(Session session)
Session
, possibly pulled from JNDI.
Default is a new Session
without defaults, that is
completely configured via this instance's properties.
If using a pre-configured Session
, non-default properties
in this instance will override the settings in the Session
.
public Session getSession()
Session
,
lazily initializing it if hasn't been specified explicitly.public void setProtocol(@Nullable java.lang.String protocol)
@Nullable public java.lang.String getProtocol()
public void setHost(@Nullable java.lang.String host)
Default is the default host of the underlying JavaMail Session.
@Nullable public java.lang.String getHost()
public void setPort(int port)
Default is DEFAULT_PORT
, letting JavaMail use the default
SMTP port (25).
public int getPort()
public void setUsername(@Nullable java.lang.String username)
Note that the underlying JavaMail Session
has to be
configured with the property "mail.smtp.auth"
set to
true
, else the specified username will not be sent to the
mail server by the JavaMail runtime. If you are not explicitly passing
in a Session
to use, simply specify this setting via
setJavaMailProperties(java.util.Properties)
.
setSession(Session)
,
setPassword(java.lang.String)
@Nullable public java.lang.String getUsername()
public void setPassword(@Nullable java.lang.String password)
Note that the underlying JavaMail Session
has to be
configured with the property "mail.smtp.auth"
set to
true
, else the specified password will not be sent to the
mail server by the JavaMail runtime. If you are not explicitly passing
in a Session
to use, simply specify this setting via
setJavaMailProperties(java.util.Properties)
.
setSession(Session)
,
setUsername(java.lang.String)
@Nullable public java.lang.String getPassword()
public void setDefaultEncoding(@Nullable java.lang.String defaultEncoding)
MimeMessages
created by this instance.
Such an encoding will be auto-detected by MimeMessageHelper
.
@Nullable public java.lang.String getDefaultEncoding()
MimeMessages
,
or null
if none.public void setDefaultFileTypeMap(@Nullable javax.activation.FileTypeMap defaultFileTypeMap)
FileTypeMap
to use for
MimeMessages
created by this instance.
A FileTypeMap
specified here will be autodetected by
MimeMessageHelper
, avoiding the need to specify the
FileTypeMap
for each MimeMessageHelper
instance.
For example, you can specify a custom instance of Spring's
ConfigurableMimeFileTypeMap
here. If not explicitly specified,
a default ConfigurableMimeFileTypeMap
will be used, containing
an extended set of MIME type mappings (as defined by the
mime.types
file contained in the Spring jar).
@Nullable public javax.activation.FileTypeMap getDefaultFileTypeMap()
FileTypeMap
for
MimeMessages
, or null
if none.public void send(SimpleMailMessage simpleMessage) throws MailException
JavaMailSender
JavaMailSender.createMimeMessage()
.send
in interface JavaMailSender
send
in interface MailSender
simpleMessage
- message to sendMailParseException
- in case of failure when parsing the messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending the messageMailException
JavaMailSender.createMimeMessage()
public void send(SimpleMailMessage... simpleMessages) throws MailException
JavaMailSender
JavaMailSender.createMimeMessage()
.send
in interface JavaMailSender
send
in interface MailSender
simpleMessages
- message to sendMailParseException
- in case of failure when parsing a messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending a messageMailException
JavaMailSender.createMimeMessage()
public MimeMessage createMimeMessage()
MimeMessageHelper
, which will use
the carried encoding and FileTypeMap unless explicitly overridden.createMimeMessage
in interface JavaMailSender
setDefaultEncoding(java.lang.String)
,
setDefaultFileTypeMap(javax.activation.FileTypeMap)
public MimeMessage createMimeMessage(java.io.InputStream contentStream) throws MailException
JavaMailSender
createMimeMessage
in interface JavaMailSender
contentStream
- the raw MIME input stream for the messageMailParseException
- in case of message creation failureMailException
public void send(MimeMessage mimeMessage) throws MailException
JavaMailSender
JavaMailSender.createMimeMessage()
.send
in interface JavaMailSender
send
in interface MailSender
mimeMessage
- message to sendMailParseException
- in case of failure when parsing the messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending the messageMailException
JavaMailSender.createMimeMessage()
public void send(MimeMessage... mimeMessages) throws MailException
JavaMailSender
JavaMailSender.createMimeMessage()
.send
in interface JavaMailSender
send
in interface MailSender
mimeMessages
- message to sendMailParseException
- in case of failure when parsing a messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending a messageMailException
JavaMailSender.createMimeMessage()
public void testConnection() throws MessagingException
MessagingException
if the connection attempt failed.MessagingException
protected void doSend(MimeMessage[] mimeMessages, @Nullable java.lang.Object[] originalMessages) throws MailException
mimeMessages
- the MimeMessage objects to sendoriginalMessages
- corresponding original message objects
that the MimeMessages have been created from (with same array
length and indices as the "mimeMessages" array), if anyMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending a messageMailException
protected Transport connectTransport() throws MessagingException
MessagingException
- if the connect attempt failedgetTransport(Session)
,
getHost()
,
getPort()
,
getUsername()
,
getPassword()
protected Transport getTransport(Session session) throws NoSuchProviderException
Can be overridden in subclasses, e.g. to return a mock Transport object.
NoSuchProviderException
javax.mail.Session#getTransport(String)
,
getSession()
,
getProtocol()