package com.venky.swf.plugins.mail.core; import java.util.List; import javax.mail.Message.RecipientType; import org.codemonkey.simplejavamail.Email; import com.venky.core.io.StringReader; import com.venky.core.util.ObjectUtil; import com.venky.swf.db.Database; import com.venky.swf.db.model.UserEmail; import com.venky.swf.plugins.background.core.Task; import com.venky.swf.plugins.mail.db.model.SentMail; import com.venky.swf.plugins.mail.db.model.User; import com.venky.swf.routing.Config; public class MailerTask implements Task{ private static final long serialVersionUID = 8083486775891668308L; int toUserId ; String subject; String text; boolean isHtml = false; public MailerTask(User to,String subject, String text){ this.toUserId = to.getId(); this.subject = subject; this.text = text; if (!ObjectUtil.isVoid(text)){ int len = text.trim().length(); if (len > 5 ) { this.isHtml = text.trim().substring(0, 5).equalsIgnoreCase("<html"); } } } public void execute() { User to = Database.getTable(User.class).get(toUserId); if (to == null){ return; } List<UserEmail> emails = to.getUserEmails(); if (emails.isEmpty()){ throw new RuntimeException("No email available for " + to.getName()); } String emailId = Config.instance().getProperty("swf.sendmail.user"); String userName = Config.instance().getProperty("swf.sendmail.user.name"); if( ObjectUtil.isVoid(emailId)) { throw new RuntimeException("Plugin not configured :swf.sendmail.user" ); } final Email email = new Email(); email.setFromAddress(userName, emailId); email.setSubject(subject); StringBuilder emailString = new StringBuilder(); for (UserEmail toEmail:emails){ email.addRecipient(to.getName() + "(" + toEmail.getEmail() + ")", toEmail.getEmail(), RecipientType.TO); emailString.append(toEmail.getEmail()).append(";"); } if (isHtml){ email.setTextHTML(text); }else { email.setText(text); } SentMail mail = Database.getTable(SentMail.class).newRecord(); mail.setUserId(toUserId); mail.setEmail(emailString.toString()); mail.setSubject(subject); mail.setBody(new StringReader(text)); mail.save(); AsyncMailer.instance().addEmail(email); } }