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(javax.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 and Description
    --- | ---
    `static int` | `DEFAULT_PORT` The default port: -1.
    `static String` | `DEFAULT_PROTOCOL` The default protocol: 'smtp'.

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    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()` 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(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.

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

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

- - ### Field Detail

    - #### 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 Detail

    - #### JavaMailSenderImpl

          public JavaMailSenderImpl()

      Create a new instance of the `JavaMailSenderImpl` class.

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

  - ### Method Detail

    - #### 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(javax.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(javax.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(javax.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(javax.activation.FileTypeMap)`

    - #### getDefaultFileTypeMap

          @Nullable
          public FileTypeMap getDefaultFileTypeMap()

      Return the default Java Activation `FileTypeMap` for `MimeMessages`, or `null` if none.

    - #### send

          public void send(SimpleMailMessage simpleMessage)
                    throws MailException

      Description copied from interface: `MailSender`
      Send the given simple mail message.
      Specified by:
        `send` in interface `MailSender`
      Parameters:
        `simpleMessage` - the message to send
      Throws:
        `MailParseException` - in case of failure when parsing the message
        `MailAuthenticationException` - in case of authentication failure
        `MailSendException` - in case of failure when sending the message
        `MailException`

    - #### 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(javax.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 mimeMessage)
                    throws MailException

      Description copied from interface: `JavaMailSender`
      Send the given JavaMail MIME message. The message needs to have been created with `JavaMailSender.createMimeMessage()`.
      Specified by:
        `send` in interface `JavaMailSender`
      Parameters:
        `mimeMessage` - message to send
      Throws:
        `MailAuthenticationException` - in case of authentication failure
        `MailSendException` - in case of failure when sending the message
        `MailException`
      See Also:
        `JavaMailSender.createMimeMessage()`

    - #### 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()`

    - #### send

          public void send(MimeMessagePreparator mimeMessagePreparator)
                    throws MailException

      Description copied from interface: `JavaMailSender`
      Send the JavaMail MIME message prepared by the given MimeMessagePreparator.

      Alternative way to prepare MimeMessage instances, instead of `JavaMailSender.createMimeMessage()` and `JavaMailSender.send(MimeMessage)` calls. Takes care of proper exception conversion.

      Specified by:
        `send` in interface `JavaMailSender`
      Parameters:
        `mimeMessagePreparator` - the preparator to use
      Throws:
        `MailPreparationException` - in case of failure when preparing the message
        `MailParseException` - in case of failure when parsing the message
        `MailAuthenticationException` - in case of authentication failure
        `MailSendException` - in case of failure when sending the message
        `MailException`

    - #### send

          public void send(MimeMessagePreparator... mimeMessagePreparators)
                    throws MailException

      Description copied from interface: `JavaMailSender`
      Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.

      Alternative way to prepare MimeMessage instances, instead of `JavaMailSender.createMimeMessage()` and `JavaMailSender.send(MimeMessage[])` calls. Takes care of proper exception conversion.

      Specified by:
        `send` in interface `JavaMailSender`
      Parameters:
        `mimeMessagePreparators` - the preparator to use
      Throws:
        `MailPreparationException` - in case of failure when preparing a message
        `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`

    - #### 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(javax.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, e.g. to return a mock Transport object.

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