package dailyBot.control.connection;
import java.util.ArrayList;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import dailyBot.control.DailyLog;
import dailyBot.control.DailyProperties;
public class EmailConnection
{
private static final String SMTP_HOST_NAME = "gmail-smtp.l.google.com";
private static final String username = DailyProperties
.getProperty("dailyBot.control.connection.EmailConnection.emailFrom");
private static final String emailFromAddress = DailyProperties
.getProperty("dailyBot.control.connection.EmailConnection.emailFrom");
private static final String[] emailListWatchers = DailyProperties
.getProperty("dailyBot.control.connection.EmailConnection.emailToWatchers").split(",");
private static final String[] emailListAdmins = DailyProperties
.getProperty("dailyBot.control.connection.EmailConnection.emailToAdmins").split(",");
private static final String[] emailListSuperadmins = DailyProperties
.getProperty("dailyBot.control.connection.EmailConnection.emailToSuperadmins").split(",");
private static final Session session = loadSession();
private static final ExecutorService executor = Executors.newFixedThreadPool(1);
private static Session loadSession()
{
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", SMTP_HOST_NAME);
properties.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties, new Authenticator()
{
@Override
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, DailyProperties
.getProperty("dailyBot.control.connection.EmailConnection.emailFromPassword"));
}
});
return session;
}
public static final int WATCHERS = 1;
public static final int ADMINS = 2;
public static final int SUPERADMINS = 4;
private static class MessageSenderHelper implements Runnable
{
String subject;
String message;
int mask;
private MessageSenderHelper(String subject, String message, int mask)
{
this.subject = subject;
this.message = message;
this.mask = mask;
}
public void run()
{
try
{
session.setDebug(false);
Message mimeMessage = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(emailFromAddress);
mimeMessage.setFrom(addressFrom);
ArrayList <String> emailsToSend = new ArrayList <String> ();
if((mask & WATCHERS) != 0)
for(String email : emailListWatchers)
emailsToSend.add(email);
if((mask & ADMINS) != 0)
for(String email : emailListAdmins)
emailsToSend.add(email);
if((mask & SUPERADMINS) != 0)
for(String email : emailListSuperadmins)
emailsToSend.add(email);
InternetAddress[] addressTo = new InternetAddress[emailsToSend.size()];
for(int i = 0; i < addressTo.length; i++)
addressTo[i] = new InternetAddress(emailsToSend.get(i));
mimeMessage.setRecipients(Message.RecipientType.TO, addressTo);
mimeMessage.setSubject(subject);
mimeMessage.setContent(message, message.contains("<html>") ? "text/html" : "text/plain");
Transport.send(mimeMessage);
}
catch(MessagingException e)
{
DailyLog.logErrorToDisk("Error al enviar el correo " + e.getMessage() + ". Titulo: " + subject + ", contenido: " + message);
}
}
}
public static void sendEmail(String subject, String message, int mask1)
{
if(DailyProperties.isTesting())
message = "TESTING\n" + message;
executor.submit(new MessageSenderHelper(subject, message, mask1));
}
}