EmailSender.java
package org.ferris.tweial.console.email;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Properties;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
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.apache.log4j.Logger;
import org.ferris.tweial.console.log4j.Log4jRollingFileAppender;
import org.ferris.tweial.console.retry.ExceptionRetry;
import org.jboss.weld.experimental.Priority;
/**
*
* @author Michael Remijan mjremijan@yahoo.com @mjremijan
*/
public class EmailSender {
@Inject
protected Logger log;
@Inject
protected EmailHandler emailHandler;
@ExceptionRetry
public void sendEmail(
@Observes @Priority(EmailSendPriority.SEND_EMAIL_MESSAGE)
EmailSendEvent evnt
) throws MessagingException, IOException {
if (evnt.getSubject().isEmpty() || evnt.getMessage().isEmpty()) {
return;
}
// Create MimeMultipart
MimeMultipart content = new MimeMultipart("related");
// html part
{
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(evnt.getMessage(), "UTF8", "html");
content.addBodyPart(textPart);
}
// properties
EmailAccount emailAccount = emailHandler.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(true);
smtp.setDebugOut(getPrintStream());
}
MimeMessage m = new MimeMessage(smtp);
{
// to
m.setRecipient(
Message.RecipientType.TO
, new InternetAddress(emailAccount.getSendToAddress())
);
// subject
m.setSubject(evnt.getSubject());
// from
{
InternetAddress from = new InternetAddress(emailAccount.getEmailAddress());
from.setPersonal("Tweial");
m.setFrom(from);
}
// reply
{
InternetAddress reply = new InternetAddress(emailAccount.getEmailAddress());
reply.setPersonal("Tweial");
m.setReplyTo(new InternetAddress[] {reply});
}
m.setContent(content);
}
log.info(String.format("Attempt email with %s", emailAccount.toString()));
Transport.send(m);
}
protected PrintStream getPrintStream() {
Enumeration enu = log.getAllAppenders();
while (enu.hasMoreElements()) {
Object o = enu.nextElement();
if (o instanceof Log4jRollingFileAppender) {
return ((Log4jRollingFileAppender)o).getPrintStream();
}
}
return System.out;
}
}