package it.paspiz85.nanobot.util;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* Utility to send mails.
*
* @author paspiz85
*
*/
public final class Mailer {
/**
* Interface to compose mail message.
*
* @author paspiz85
*
*/
@FunctionalInterface
public interface MessageComposer {
void compose(MimeMessage message) throws MessagingException, UnsupportedEncodingException;
}
private static Mailer instance;
public static Mailer instance() {
if (instance == null) {
instance = new Mailer();
}
return instance;
}
private Properties mailServerProperties;
private Mailer() {
}
private Properties getMailServerProperties() {
if (mailServerProperties == null) {
mailServerProperties = new Properties();
mailServerProperties.put("mail.smtp.port", "587");
mailServerProperties.put("mail.smtp.auth", "true");
mailServerProperties.put("mail.smtp.starttls.enable", "true");
}
return mailServerProperties;
}
public void send(final MessageComposer messageComposer) throws UnsupportedEncodingException, MessagingException {
final Session mailSession = Session.getDefaultInstance(getMailServerProperties(), null);
final MimeMessage mailMessage = new MimeMessage(mailSession);
messageComposer.compose(mailMessage);
mailMessage.setFrom(new InternetAddress("clash.nanobot@gmail.com", "NanoBot"));
final Transport transport = mailSession.getTransport("smtp");
transport.connect("smtp.gmail.com", "clash.nanobot", "Java8Mail");
transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
transport.close();
}
}