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

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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 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 mimeMessage)` Send the given JavaMail MIME message.
    `void` | `send(MimeMessage[] mimeMessages)` Send the given array of JavaMail MIME messages in batch.
    `void` | `send(MimeMessagePreparator mimeMessagePreparator)` Send the JavaMail MIME message prepared by the given MimeMessagePreparator.
    `void` | `send(MimeMessagePreparator[] mimeMessagePreparators)` Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.
    `void` | `send(SimpleMailMessage simpleMessage)` Send the given simple mail message.
    `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.

    - ### 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 hasn't been specified explicitly.

    - #### setProtocol

          public void setProtocol(String protocol)

      Set the mail protocol. Default is "smtp".

    - #### getProtocol

          public String getProtocol()

      Return the mail protocol.

    - #### setHost

          public void setHost(String host)

      Set the mail server host, typically an SMTP host.

      Default is the default host of the underlying JavaMail Session.

    - #### getHost

          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(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

          public String getUsername()

      Return the username for the account at the mail host.

    - #### setPassword

          public void setPassword(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

          public String getPassword()

      Return the password for the account at the mail host.

    - #### setDefaultEncoding

          public void setDefaultEncoding(String defaultEncoding)

      Set the default encoding to use for `MimeMessages` created by this instance.

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

    - #### getDefaultEncoding

          public String getDefaultEncoding()

      Return the default encoding for `MimeMessages`, or `null` if none.

    - #### setDefaultFileTypeMap

          public void setDefaultFileTypeMap(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

          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`

    - #### doSend

          protected void doSend(MimeMessage[] mimeMessages,
                    Object[] originalMessages)
                         throws MailException

      Actually send the given array of MimeMessages via JavaMail.
      Parameters:
        `mimeMessages` - 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`

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