package utils;
import models.Mail;
import models.User;
import play.Logger;
import play.Play;
import play.libs.mailer.Email;
import play.libs.mailer.MailerPlugin;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Mailer {
/**
* This method will not directly send
* @param user Which user the email is sent to.
* @param subject Email's subject.
* @param content Email's content, encoded in UTF-8 HTML.
*/
public static void sendMail(User user, String subject, String content) {
assert user != null && user.name != null && user.email != null;
assert subject != null && content != null;
Logger.info("Mailer receives an email with subject " + subject + " to " + user.name);
Mail mail = new Mail();
mail.receiver = user.email;
mail.user = user;
mail.subject = subject;
mail.content = content;
mail.save();
executor.execute(new SendMail(mail));
}
/**
*
* @param mail A email object from database.
*/
private static void sendSingleMail(Mail mail) {
try {
Email email = new Email();
email.setSubject(mail.subject);
email.setBodyHtml(mail.content);
email.setFrom("Orange Judge <support@orangejudge.com>");
email.addTo(mail.user.displayName + " <" + mail.receiver + ">");
MailerPlugin.send(email);
mail.status = 1;
mail.save();
} catch (Exception ex) {
Logger.error("Exception in sending email: " + ex.toString());
ex.printStackTrace();
mail.status = 11;
mail.save();
}
}
private static final ExecutorService executor = Executors.newSingleThreadExecutor();
private static class SendMail implements Runnable {
private Mail mail;
public SendMail(Mail mail) {
this.mail = mail;
}
@Override
public void run() {
Logger.info("Sending job...");
sendSingleMail(mail);
}
}
}