public class JavaMailSenderImpl extends 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 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
.
MimeMessage
,
Session
,
setSession(javax.mail.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 String |
DEFAULT_PROTOCOL
The default protocol: 'smtp'.
|
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(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,
Object[] originalMessages)
Actually send the given array of MimeMessages via JavaMail.
|
String |
getDefaultEncoding()
Return the default encoding for
MimeMessages ,
or null if none. |
FileTypeMap |
getDefaultFileTypeMap()
|
String |
getHost()
Return the mail server host.
|
Properties |
getJavaMailProperties()
Allow {code Map} access to the JavaMail properties of this sender,
with the option to add or override specific entries.
|
String |
getPassword()
Return the password for the account at the mail host.
|
int |
getPort()
Return the mail server port.
|
String |
getProtocol()
Return the mail protocol.
|
Session |
getSession()
Return the JavaMail
Session ,
lazily initializing it if it hasn't been specified explicitly. |
protected Transport |
getTransport(Session session)
Obtain a Transport object from the given JavaMail Session,
using the configured protocol.
|
String |
getUsername()
Return the username for the account at the mail host.
|
void |
send(MimeMessage... mimeMessages)
Send the given array of JavaMail MIME messages in batch.
|
void |
send(MimeMessage mimeMessage)
Send the given JavaMail MIME message.
|
void |
send(MimeMessagePreparator... mimeMessagePreparators)
Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.
|
void |
send(MimeMessagePreparator mimeMessagePreparator)
Send the JavaMail MIME message prepared by the given MimeMessagePreparator.
|
void |
send(SimpleMailMessage... simpleMessages)
Send the given array of simple mail messages in batch.
|
void |
send(SimpleMailMessage simpleMessage)
Send the given simple mail message.
|
void |
setDefaultEncoding(String defaultEncoding)
Set the default encoding to use for
MimeMessages
created by this instance. |
void |
setDefaultFileTypeMap(FileTypeMap defaultFileTypeMap)
Set the default Java Activation
FileTypeMap to use for
MimeMessages created by this instance. |
void |
setHost(String host)
Set the mail server host, typically an SMTP host.
|
void |
setJavaMailProperties(Properties javaMailProperties)
Set JavaMail properties for the
Session . |
void |
setPassword(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(String protocol)
Set the mail protocol.
|
void |
setSession(Session session)
Set the JavaMail
Session , possibly pulled from JNDI. |
void |
setUsername(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 String DEFAULT_PROTOCOL
public static final int DEFAULT_PORT
public JavaMailSenderImpl()
JavaMailSenderImpl
class.
Initializes the "defaultFileTypeMap"
property with a default ConfigurableMimeFileTypeMap
.
public void setJavaMailProperties(Properties javaMailProperties)
Session
.
A new Session
will be created with those properties.
Use either this method or setSession(javax.mail.Session)
, but not both.
Non-default properties in this instance will override given JavaMail properties.
public Properties getJavaMailProperties()
Useful for specifying entries directly, for example via {code 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 it hasn't been specified explicitly.public void setProtocol(@Nullable String protocol)
public void setHost(@Nullable String host)
Default is the default host of the underlying JavaMail Session.
public void setPort(int port)
Default is DEFAULT_PORT
, letting JavaMail use the default
SMTP port (25).
public int getPort()
public void setUsername(@Nullable 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)
.
@Nullable public String getUsername()
public void setPassword(@Nullable 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)
.
@Nullable public String getPassword()
public void setDefaultEncoding(@Nullable String defaultEncoding)
MimeMessages
created by this instance.
Such an encoding will be auto-detected by MimeMessageHelper
.
@Nullable public String getDefaultEncoding()
MimeMessages
,
or null
if none.public void setDefaultFileTypeMap(@Nullable 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 FileTypeMap getDefaultFileTypeMap()
public void send(SimpleMailMessage simpleMessage) throws MailException
MailSender
send
in interface MailSender
simpleMessage
- the message to sendMailParseException
- in case of failure when parsing the messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending the messageMailException
public void send(SimpleMailMessage... simpleMessages) throws MailException
MailSender
send
in interface MailSender
simpleMessages
- the messages to sendMailParseException
- in case of failure when parsing a messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending a messageMailException
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(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
mimeMessage
- message to sendMailAuthenticationException
- 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
mimeMessages
- messages to sendMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending a messageMailException
JavaMailSender.createMimeMessage()
public void send(MimeMessagePreparator mimeMessagePreparator) throws MailException
JavaMailSender
Alternative way to prepare MimeMessage instances, instead of
JavaMailSender.createMimeMessage()
and JavaMailSender.send(MimeMessage)
calls.
Takes care of proper exception conversion.
send
in interface JavaMailSender
mimeMessagePreparator
- the preparator to useMailPreparationException
- in case of failure when preparing the messageMailParseException
- in case of failure when parsing the messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending the messageMailException
public void send(MimeMessagePreparator... mimeMessagePreparators) throws MailException
JavaMailSender
Alternative way to prepare MimeMessage instances, instead of
JavaMailSender.createMimeMessage()
and JavaMailSender.send(MimeMessage[])
calls.
Takes care of proper exception conversion.
send
in interface JavaMailSender
mimeMessagePreparators
- the preparator to useMailPreparationException
- in case of failure when preparing a messageMailParseException
- in case of failure when parsing a messageMailAuthenticationException
- in case of authentication failureMailSendException
- in case of failure when sending a messageMailException
public void testConnection() throws MessagingException
MessagingException
if the connection attempt failed.MessagingException
protected void doSend(MimeMessage[] mimeMessages, @Nullable 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(javax.mail.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
Session.getTransport(String)
,
getSession()
,
getProtocol()