EmailSender.java
package org.ferris.resiste.console.email;
import java.util.Properties;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.ferris.resiste.console.retry.ExceptionRetry;
import org.slf4j.Logger;
/**
*
* @author Michael Remijan mjremijan@yahoo.com @mjremijan
*/
@ApplicationScoped
public class EmailSender {
@Inject
protected Logger log;
@Inject
protected EmailAccountService emailAccountService;
@ExceptionRetry
public void send(EmailDraft draft)
{
log.info(String.format("ENTER %s", draft));
try {
// Create MimeMultipart
MimeMultipart content = new MimeMultipart("related");
// html part
{
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(draft.getBody(), "UTF8", "html");
content.addBodyPart(textPart);
}
// properties
EmailAccount emailAccount = emailAccountService.getEmailAccount();
Properties props = new Properties();
if (emailAccount.isSslEnabled()) {
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.host", emailAccount.getHost());
props.setProperty("mail.smtp.socketFactory.port", emailAccount.getPort().toString());
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
} else {
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.host", emailAccount.getHost());
props.setProperty("mail.smtp.port", emailAccount.getPort().toString());
props.setProperty("mail.smtp.starttls.enable", "true");
}
Session smtp = null;
{
smtp = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
emailAccount.getUsername()
, emailAccount.getPassword()
);
}
});
smtp.setDebug(false);
}
MimeMessage m = new MimeMessage(smtp);
{
// to
m.setRecipient(
Message.RecipientType.TO
, new InternetAddress(emailAccount.getSendToAddress())
);
// subject
m.setSubject(draft.getSubject());
// from
{
InternetAddress from = new InternetAddress(emailAccount.getEmailAddress());
from.setPersonal("Resiste");
m.setFrom(from);
}
// reply
{
InternetAddress reply = new InternetAddress(emailAccount.getEmailAddress());
reply.setPersonal("Resiste");
m.setReplyTo(new InternetAddress[] {reply});
}
m.setContent(content);
}
log.info(String.format("Attempt email with %s", emailAccount.toString()));
Transport.send(m);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}