/* * Data Hub Service (DHuS) - For Space data distribution. * Copyright (C) 2013,2014,2015 GAEL Systems * * This file is part of DHuS software sources. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package fr.gael.dhus.messaging.mail; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import org.apache.commons.mail.Email; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.google.common.collect.ImmutableList; import fr.gael.dhus.system.config.ConfigurationManager; /** * Manage mail service * */ @Component public class MailServer implements MailServerInterface { private static final Logger LOGGER = LogManager.getLogger(MailServer.class); @Autowired private ConfigurationManager cfgManager; public void send (Email email, String to, String cc, String bcc, String subject) throws EmailException { email.setHostName (getSmtpServer ()); email.setSmtpPort (getPort()); if ((getUsername () != null) && !getUsername().isEmpty()) { email.setAuthentication (getUsername(), getPassword()); } if (getFromMail () != null) { if (getFromName () != null) email.setFrom (getFromMail (), getFromName ()); else email.setFrom (getFromMail ()); } if (getReplyto () != null) { try { email.setReplyTo(ImmutableList.of( new InternetAddress(getReplyto()))); } catch(AddressException e) { LOGGER.error("Cannot configure Reply-to (" + getReplyto() + ") into the mail: " + e.getMessage()); } } // Message configuration email.setSubject ("["+cfgManager.getNameConfiguration ().getShortName () + "] " + subject); email.addTo (to); // Add CCed if (cc != null) { email.addCc (cc); } // Add BCCed if (bcc != null) { email.addBcc (bcc); } email.setStartTLSEnabled (isTls ()); try { email.send (); } catch (EmailException e) { LOGGER.error("Cannot send email: " + e.getMessage()); throw e; } } public void send (String to, String cc, String bcc, String subject, String message, EmailAttachment attachment) throws EmailException { MultiPartEmail email = new MultiPartEmail (); // Server configuration email.setMsg (message); if (attachment != null) email.attach (attachment); send (email, to, cc, bcc, subject); } public void send (String to, String cc, String bcc, String subject, String message) throws EmailException { send (to, cc, bcc, subject, message, null); } /** * @return the smtpServer */ public String getSmtpServer () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getSmtp (); } /** * @return the port */ public int getPort () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getPort (); } /** * @return the tls */ public boolean isTls () { return cfgManager.getMailConfiguration ().getServerConfiguration () .isTls (); } /** * @return the username */ public String getUsername () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getUsername (); } /** * @return the password */ public String getPassword () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getPassword (); } /** * @return the replyto */ public String getReplyto () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getReplyTo (); } /** * @return the fromMail */ public String getFromMail () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getMailFromConfiguration ().getAddress (); } /** * @return the fromName */ public String getFromName () { return cfgManager.getMailConfiguration ().getServerConfiguration () .getMailFromConfiguration ().getName (); } }