/* * Copyright 2014 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.services.mail; import java.util.List; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; /** * Methods for dealing with the preparation of JavaMail MIME messages. * The corresponding send methods of JavaMailSender will take care of the actual * creation of a MimeMessage instance. Used primarily by asynchronous Ice * services: {@code omero.cmd.mail.SendEmailRequestI}. * * @author Aleksandra Tarkowska, A (dot) Tarkowska at dundee.ac.uk * @since 5.1.0 */ public class MailUtil { private final static Logger log = LoggerFactory.getLogger(MailUtil.class); private static final long serialVersionUID = -1L; protected final String sender; protected final JavaMailSender mailSender; public MailUtil(String sender, JavaMailSender mailSender) { if (StringUtils.isBlank(sender)) { log.error("omero.mail.from is empty. Email notification won't be sent."); } this.sender = sender; this.mailSender = mailSender; } /** * Helper method that returns value of <code>omero.mail.from</code>. */ public String getSender() { return sender; } /** * Main method which takes typical email fields as arguments, to prepare and * populate the given new MimeMessage instance and send. * * @param from * email address message is sent from * @param to * email address message is sent to * @param topic * topic of the message * @param body * body of the message * @param html * flag determines the content type to apply. * @param ccrecipients * list of email addresses message is sent as copy to * @param bccrecipients * list of email addresses message is sent as blind copy to */ public void sendEmail(final String from, final String to, final String topic, final String body, final boolean html, final List<String> ccrecipients, final List<String> bccrecipients) { MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws Exception { MimeMessageHelper message = new MimeMessageHelper(mimeMessage); message.setText(body, html); message.setFrom(from); message.setSubject(topic); message.setTo(to); if (ccrecipients != null && !ccrecipients.isEmpty()) { message.setCc(ccrecipients.toArray(new String[ccrecipients .size()])); } if (bccrecipients != null && !bccrecipients.isEmpty()) { message.setCc(bccrecipients .toArray(new String[bccrecipients.size()])); } } }; this.mailSender.send(preparator); } /** * Overloaded method which takes typical email fields as arguments, to * prepare and populate the given new MimeMessage instance and send. Sender * of the email is loaded from omero.mail.from * * @param to * email address message is sent to * @param topic * topic of the message * @param body * body of the message * @param html * flag determines the content type to apply. * @param ccrecipients * list of email addresses message is sent as copy to * @param bccrecipients * list of email addresses message is sent as blind copy to */ public void sendEmail(final String to, final String topic, final String body, final boolean html, final List<String> ccrecipients, final List<String> bccrecipients) { this.sendEmail(sender, to, topic, body, html, ccrecipients, bccrecipients); } /** * Helper Validate that this address conforms to the syntax rules of RFC * 822. * * @param email * email address */ public boolean validateEmail(String email) { boolean isValid = true; try { InternetAddress internetAddress = new InternetAddress(email); internetAddress.validate(); } catch (AddressException e) { isValid = false; } return isValid; } }