private JavaMailer createMailer(final MailTransportParameters mailParms)
      throws JavaMailerException {
    final JavaMailer sendMailer = new JavaMailer(mailParms.getJavamailProperties());
    final String mailPropsPrefix =
        new StringBuilder("mail.").append(mailParms.getSendTestTransport()).append('.').toString();
    final Properties props = sendMailer.getSession().getProperties();

    // user
    props.setProperty(mailPropsPrefix + "user", mailParms.getSendTestUserName());
    sendMailer.setUser(mailParms.getSendTestUserName());
    sendMailer.setPassword(mailParms.getSendTestPassword());

    // host
    props.setProperty(mailPropsPrefix + "host", mailParms.getSendTestHost());
    sendMailer.setMailHost(mailParms.getSendTestHost());

    // port
    props.setProperty(mailPropsPrefix + "port", String.valueOf(mailParms.getSendTestPort()));
    sendMailer.setSmtpPort(mailParms.getSendTestPort());

    // connectiontimeout
    // Override this with configured javamail property because this setting is a generic timeout
    // value
    if (!props.containsKey(mailPropsPrefix + "connectiontimeout")) {
      props.setProperty(
          mailPropsPrefix + "connectiontimeout", String.valueOf(mailParms.getTimeout()));
    }

    // timeout
    // Override this with configured javamail property because this setting is a generic timeout
    // value
    if (!props.containsKey(mailPropsPrefix + "timeout")) {
      props.setProperty(mailPropsPrefix + "timeout", String.valueOf(mailParms.getTimeout()));
    }

    // from
    props.setProperty(mailPropsPrefix + "from", mailParms.getSendTestFrom());
    sendMailer.setFrom(mailParms.getSendTestFrom());

    // auth
    props.setProperty(mailPropsPrefix + "auth", String.valueOf(mailParms.isSendTestUseAuth()));
    sendMailer.setAuthenticate(mailParms.isSendTestUseAuth());

    // quitwait
    props.setProperty(
        mailPropsPrefix + "quitwait", String.valueOf(mailParms.isSendTestIsQuitWait()));
    sendMailer.setQuitWait(mailParms.isSendTestIsQuitWait());

    // socketFactory.class
    // socketFactory.port
    if (mailParms.isSendTestIsSslEnable()) {

      // override this hard coded default if this property is specified
      if (!props.containsKey(mailPropsPrefix + "socketFactory.class")) {
        props.setProperty(
            mailPropsPrefix + "socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      }
      props.setProperty(
          mailPropsPrefix + "socketFactory.port", String.valueOf(mailParms.getSendTestPort()));
      sendMailer.setSmtpPort(mailParms.getSendTestPort());
    }
    sendMailer.setSmtpSsl(mailParms.isSendTestIsSslEnable());

    // starttls.enable
    props.setProperty(
        mailPropsPrefix + "starttls.enable", String.valueOf(mailParms.isSendTestStartTls()));
    sendMailer.setStartTlsEnabled(mailParms.isSendTestStartTls());
    sendMailer.addExtraHeader(MTM_HEADER_KEY, m_headerValue);

    sendMailer.setSession(Session.getInstance(props, sendMailer.createAuthenticator()));

    return sendMailer;
  }