## 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
`static int` `DEFAULT_PORT` The default port: -1
`static String` `DEFAULT_PROTOCOL` The default protocol: 'smtp'

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

Method Summary
`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()`