package eu.lod2.rsine.dissemination.notifier.email; import eu.lod2.rsine.Rsine; import eu.lod2.rsine.dissemination.notifier.INotifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.Properties; public class EmailNotifier implements INotifier { private final Logger logger = LoggerFactory.getLogger(EmailNotifier.class); private String emailAddress, from, host, port, subject = "[WP5] Notification", username, password; public EmailNotifier(String emailAddress) { this.emailAddress = emailAddress.replaceFirst("mailto:", ""); readSettingsFromProperties(); } private void readSettingsFromProperties() { Properties properties = new Properties(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream stream = loader.getResourceAsStream(Rsine.propertiesFileName); try { properties.load(stream); host = (String) properties.get("emailnotifier.smtp.host"); port = (String) properties.get("emailnotifier.smtp.port"); from = (String) properties.get("emailnotifier.from"); subject = (String) properties.get("emailnotifier.subject"); username = (String) properties.get("emailnotifier.smtp.username"); password = (String) properties.get("emailnotifier.smtp.password"); } catch (IOException e) { logger.error("Could not read notifiers properties file"); } } @Override public void notify(Collection<String> messages) { try { MimeMessage message = new MimeMessage(createSession()); message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailAddress)); message.setFrom(new InternetAddress(from)); message.setSubject(subject); message.setContent(createMessageText(messages).toString(), "text/html; charset=utf-8"); logger.info("Sending email notification"); Transport.send(message); } catch (Exception e) { logger.error("Could not send email to '" +emailAddress+ "': " +e.getMessage()); } } private Session createSession() { return Session.getInstance( createMailProperties(), new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); } private Properties createMailProperties() { Properties properties = new Properties(); properties.put("mail.smtp.host", host); properties.put("mail.smtp.port", port); properties.put("mail.smtp.auth", true); properties.put("mail.smtp.starttls.enable", true); return properties; } private StringBuilder createMessageText(Collection<String> messages) throws MessagingException { StringBuilder m = new StringBuilder(); for(String s : messages){ m.append(s); m.append("\n"); } return m; } }