package carpool.asyncTask.relayTask;
import java.util.Map.Entry;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import carpool.common.DebugLog;
import carpool.configurations.CarpoolConfig;
import carpool.configurations.EnumConfig.EmailEvent;
import carpool.interfaces.PseudoAsyncTask;
public class SESRelayTask implements PseudoAsyncTask{
private String receiver;
private String subject;
private String body;
public SESRelayTask(String receiver, EmailEvent event, String payload){
this.receiver = receiver;
Entry<String, String> entry = CarpoolConfig.emailEventMap.get(event);
if (entry == null){
DebugLog.d("SESRelay Fatal: null entry from emailEventMap with given evt");
throw new RuntimeException();
}
this.subject = entry.getKey();
this.body = entry.getValue().replaceAll(CarpoolConfig.htmlTemplateURLTarget, payload);
}
public boolean execute(){
return send();
}
public boolean send(){
try{
Properties props = System.getProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.port", CarpoolConfig.SMTP_PORT);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.starttls.required", "true");
// Create a Session object to represent a mail session with the specified properties.
Session session = Session.getDefaultInstance(props);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(CarpoolConfig.SMTP_FROM));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(this.receiver));
msg.setSubject(this.subject);
msg.setContent(this.body,"text/html");
Transport transport = session.getTransport();
try{
transport.connect(CarpoolConfig.SMTP_HOST, CarpoolConfig.SMTP_USERNAME, CarpoolConfig.SMTP_PASSWORD);
transport.sendMessage(msg, msg.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
DebugLog.d(e);
} finally{
transport.close();
}
}catch (Exception e) {
e.printStackTrace();
DebugLog.d(e);
}
return true;
}
}