package com.eas.server.mail;
import com.eas.script.Scripts;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;
import javax.naming.InitialContext;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.naming.Context;
import javax.naming.NamingException;
import jdk.nashorn.api.scripting.JSObject;
/**
*
* @author mgainullin
*/
public class Messages {
private static final String DEFAULT_LOOKUP_PLACE = "java:comp/env";
private static final String DEFAULT_MAIL_SESSION_NAME = "mail/Session";
private static final String DEFAULT_CONTENT_TYPE = "text/plain; charset=utf-8";
private final String lookup;
private final String sessionName;
private final String contentType;
public Messages(){
super();
lookup = DEFAULT_LOOKUP_PLACE;
sessionName = DEFAULT_MAIL_SESSION_NAME;
contentType = DEFAULT_CONTENT_TYPE;
}
public Messages(final String aContentType){
super();
lookup = DEFAULT_LOOKUP_PLACE;
sessionName = DEFAULT_MAIL_SESSION_NAME;
contentType = aContentType;
}
public Messages(final String aLookup, final String aSessionName){
super();
lookup = aLookup;
sessionName = aSessionName;
contentType = DEFAULT_CONTENT_TYPE;
}
public Messages(final String aLookup, final String aSessionName, final String aContentType){
super();
lookup = aLookup;
sessionName = aSessionName;
contentType = aContentType;
}
public void send(String from, String to, String subject, String body, JSObject aOnSuccess, JSObject aOnFailure) throws NamingException, AddressException, MessagingException {
InitialContext initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup(lookup);
Session session = (Session) envCtx.lookup(sessionName);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(MimeMessage.RecipientType.TO, to);
message.setSubject(subject);
message.setContent(body, contentType);
Scripts.Space callingSpace = Scripts.getSpace();
Scripts.LocalContext callingContext = Scripts.getContext();
callingContext.incAsyncsCount();
Scripts.startBIO(() -> {
try {
Transport.send(message);
if (aOnSuccess != null) {
callingSpace.process(callingContext, () -> {
aOnSuccess.call(null, new Object[]{});
});
}
} catch (MessagingException ex) {
Logger.getLogger(Messages.class.getName()).log(Level.SEVERE, null, ex);
if (aOnFailure != null) {
callingSpace.process(callingContext, () -> {
aOnFailure.call(null, new Object[]{ex});
});
}
}
});
}
}