Package org.springframework.mail.javamail

# Class JavaMailSenderImpl

java.lang.Object
org.springframework.mail.javamail.JavaMailSenderImpl

All Implemented Interfaces:
  `JavaMailSender`, `MailSender`

public class JavaMailSenderImpl extends Object implements JavaMailSender
Production implementation of the `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`.

Since:
  10.09.2003
Author:
  Dmitriy Kopylenko, Juergen Hoeller
See Also:
  - `MimeMessage`
  - `Session`
  - `setSession(jakarta.mail.Session)`
  - `setJavaMailProperties(java.util.Properties)`
  - `setHost(java.lang.String)`
  - `setPort(int)`
  - `setUsername(java.lang.String)`
  - `setPassword(java.lang.String)`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`DEFAULT_PORT`
The default port: -1.
`static final String`
`DEFAULT_PROTOCOL`
The default protocol: 'smtp'.

## Constructor Summary

Constructors
Constructor
Description
`JavaMailSenderImpl()`
Create a new instance of the `JavaMailSenderImpl` class.

## Method Summary

Modifier and Type
Method
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()`
Return the default Java Activation `FileTypeMap` for `MimeMessages`, or `null` if none.
`String`
`getHost()`
Return the mail server host.
`Properties`
`getJavaMailProperties()`
Allow `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(SimpleMailMessage... simpleMessages)`
Send the given array of simple mail messages in batch.
`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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.mail.javamail.JavaMailSender

`send, send, send`

### Methods inherited from interface org.springframework.mail.MailSender

`send`

## Field Details

### DEFAULT_PROTOCOL

public static final String DEFAULT_PROTOCOL
The default protocol: 'smtp'.

See Also:
  - Constant Field Values

### DEFAULT_PORT

public static final int DEFAULT_PORT
The default port: -1.

See Also:
  - Constant Field Values

## Constructor Details

### JavaMailSenderImpl

public JavaMailSenderImpl()
Create a new instance of the `JavaMailSenderImpl` class.

Initializes the `"defaultFileTypeMap"` property with a default `ConfigurableMimeFileTypeMap`.

## Method Details

### setJavaMailProperties

public void setJavaMailProperties(Properties javaMailProperties)
Set JavaMail properties for the `Session`.

A new `Session` will be created with those properties. Use either this method or `setSession(jakarta.mail.Session)`, but not both.

Non-default properties in this instance will override given JavaMail properties.

### getJavaMailProperties

public Properties getJavaMailProperties()
Allow `Map` access to the JavaMail properties of this sender, with the option to add or override specific entries.

Useful for specifying entries directly, for example via `javaMailProperties[mail.smtp.auth]`.

### setSession

public void setSession(Session session)
Set the JavaMail `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`.

See Also:
  - `setJavaMailProperties(java.util.Properties)`

### getSession

public Session getSession()
Return the JavaMail `Session`, lazily initializing it if it hasn't been specified explicitly.

### setProtocol

public void setProtocol(@Nullable String protocol)
Set the mail protocol. Default is "smtp".

### getProtocol

@Nullable public String getProtocol()
Return the mail protocol.

### setHost

public void setHost(@Nullable String host)
Set the mail server host, typically an SMTP host.

Default is the default host of the underlying JavaMail Session.

### getHost

@Nullable public String getHost()
Return the mail server host.

### setPort

public void setPort(int port)
Set the mail server port.

Default is `DEFAULT_PORT`, letting JavaMail use the default SMTP port (25).

### getPort

public int getPort()
Return the mail server port.

### setUsername

public void setUsername(@Nullable String username)
Set the username for the account at the mail host, if any.

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)`.

See Also:
  - `setSession(jakarta.mail.Session)`
  - `setPassword(java.lang.String)`

### getUsername

@Nullable public String getUsername()
Return the username for the account at the mail host.

### setPassword

public void setPassword(@Nullable String password)
Set the password for the account at the mail host, if any.

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)`.

See Also:
  - `setSession(jakarta.mail.Session)`
  - `setUsername(java.lang.String)`

### getPassword

@Nullable public String getPassword()
Return the password for the account at the mail host.

### setDefaultEncoding

public void setDefaultEncoding(@Nullable String defaultEncoding)
Set the default encoding to use for `MimeMessages` created by this instance.

Such an encoding will be auto-detected by `MimeMessageHelper`.

### getDefaultEncoding

@Nullable public String getDefaultEncoding()
Return the default encoding for `MimeMessages`, or `null` if none.

### setDefaultFileTypeMap

public void setDefaultFileTypeMap(@Nullable FileTypeMap defaultFileTypeMap)
Set the default Java Activation `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).

See Also:
  - `MimeMessageHelper.setFileTypeMap(jakarta.activation.FileTypeMap)`

### getDefaultFileTypeMap

@Nullable public FileTypeMap getDefaultFileTypeMap()
Return the default Java Activation `FileTypeMap` for `MimeMessages`, or `null` if none.

### send

public void send(SimpleMailMessage... simpleMessages) throws MailException
Description copied from interface: `MailSender`
Send the given array of simple mail messages in batch.

Specified by:
  `send` in interface `MailSender`
Parameters:
  `simpleMessages` - the messages to send
Throws:
  `MailParseException` - in case of failure when parsing a message
  `MailAuthenticationException` - in case of authentication failure
  `MailSendException` - in case of failure when sending a message
  `MailException`

### createMimeMessage

public MimeMessage createMimeMessage()
This implementation creates a SmartMimeMessage, holding the specified default encoding and default FileTypeMap. This special defaults-carrying message will be autodetected by `MimeMessageHelper`, which will use the carried encoding and FileTypeMap unless explicitly overridden.

Specified by:
  `createMimeMessage` in interface `JavaMailSender`
Returns:
  the new MimeMessage instance
See Also:
  - `setDefaultEncoding(java.lang.String)`
  - `setDefaultFileTypeMap(jakarta.activation.FileTypeMap)`

### createMimeMessage

public MimeMessage createMimeMessage(InputStream contentStream) throws MailException
Description copied from interface: `JavaMailSender`
Create a new JavaMail MimeMessage for the underlying JavaMail Session of this sender, using the given input stream as the message source.

Specified by:
  `createMimeMessage` in interface `JavaMailSender`
Parameters:
  `contentStream` - the raw MIME input stream for the message
Returns:
  the new MimeMessage instance
Throws:
  `MailParseException` - in case of message creation failure
  `MailException`

### send

public void send(MimeMessage... mimeMessages) throws MailException
Description copied from interface: `JavaMailSender`
Send the given array of JavaMail MIME messages in batch. The messages need to have been created with `JavaMailSender.createMimeMessage()`.

Specified by:
  `send` in interface `JavaMailSender`
Parameters:
  `mimeMessages` - messages to send
Throws:
  `MailAuthenticationException` - in case of authentication failure
  `MailSendException` - in case of failure when sending a message
  `MailException`
See Also:
  - `JavaMailSender.createMimeMessage()`

### testConnection

public void testConnection() throws MessagingException
Validate that this instance can connect to the server that it is configured for. Throws a `MessagingException` if the connection attempt failed.

Throws:
  `MessagingException`

### doSend

protected void doSend(MimeMessage[] mimeMessages, @Nullable Object[] originalMessages) throws MailException
Actually send the given array of MimeMessages via JavaMail.

Parameters:
  `mimeMessages` - the MimeMessage objects to send
  `originalMessages` - corresponding original message objects that the MimeMessages have been created from (with same array length and indices as the "mimeMessages" array), if any
Throws:
  `MailAuthenticationException` - in case of authentication failure
  `MailSendException` - in case of failure when sending a message
  `MailException`

### connectTransport

protected Transport connectTransport() throws MessagingException
Obtain and connect a Transport from the underlying JavaMail Session, passing in the specified host, port, username, and password.

Returns:
  the connected Transport object
Throws:
  `MessagingException` - if the connect attempt failed
Since:
  4.1.2
See Also:
  - `getTransport(jakarta.mail.Session)`
  - `getHost()`
  - `getPort()`
  - `getUsername()`
  - `getPassword()`

### getTransport

protected Transport getTransport(Session session) throws NoSuchProviderException
Obtain a Transport object from the given JavaMail Session, using the configured protocol.

Can be overridden in subclasses, for example, to return a mock Transport object.

Throws:
  `NoSuchProviderException`
See Also:
  - `Session.getTransport(String)`
  - `getSession()`
  - `getProtocol()`