Example #1
0
  @Override
  public void send(MailMessage message) {
    if (StringUtils.isEmpty(host)) {
      String errorText = "SMTP Host can't be null!";
      logger.error(errorText);
      throw new IllegalArgumentException(errorText);
    }

    if (message == null) {
      String errorText = "EmailMessage can't be null!";
      logger.error(errorText);
      throw new IllegalArgumentException(errorText);
    }

    Session session;

    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", port);

    if (useTls) {
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.port", tlsPort);

      // Note - not really tested.
    } else if (useSsl) {
      props.put("mail.smtp.socketFactory.port", sslPort);
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      props.put("mail.smtp.port", sslPort);
    }

    if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
      props.put("mail.smtp.auth", "true");
      session =
          Session.getInstance(
              props,
              new javax.mail.Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication(username, password);
                }
              });

    } else {
      session = Session.getInstance(props);
    }

    try {
      Message mimeMessage = new MimeMessage(session);

      mimeMessage.setFrom(new InternetAddress(message.getFrom()));
      mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(message.getTo()));
      mimeMessage.setSubject(message.getSubject());

      if (!StringUtils.isEmpty(message.getReplyTo())) {
        mimeMessage.setReplyTo(InternetAddress.parse(message.getReplyTo()));
      }

      // Body, plain vs. html
      MimeMultipart multiPartContent = new MimeMultipart();

      if (!StringUtils.isEmpty(message.getBodyPlain())) {
        MimeBodyPart plain = new MimeBodyPart();
        plain.setText(message.getBodyPlain());
        multiPartContent.addBodyPart(plain);
      }

      if (!StringUtils.isEmpty(message.getBodyHtml())) {
        MimeBodyPart html = new MimeBodyPart();
        html.setContent(message.getBodyHtml(), "text/html");
        multiPartContent.addBodyPart(html);
        multiPartContent.setSubType("alternative");
      }

      mimeMessage.setContent(multiPartContent);

      Transport.send(mimeMessage);
      logger.info("Sent email to [{}] with subject [{}].", message.getTo(), message.getSubject());

    } catch (MessagingException me) {
      logger.warn("Failed to send: [{}]", me.getMessage());
      me.printStackTrace();
      throw new RuntimeException(me);
    }
  }