From 4c7f4ca4c7eec67203ce9acdd3df375b3ef8c8f4 Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Thu, 15 Sep 2022 11:44:21 +0200 Subject: [PATCH] common mail sender --- apps/dhp-broker-application/pom.xml | 8 -- libs/dnet-apps-common/pom.xml | 6 ++ .../common/exceptions/DnetException.java | 15 +++ .../common/utils/mail/EmailFactory.java | 93 +++++++++++++++++++ .../common/utils/mail/EmailMessage.java | 56 +++++++++++ pom.xml | 7 ++ 6 files changed, 177 insertions(+), 8 deletions(-) create mode 100644 libs/dnet-apps-common/src/main/java/eu/dnetlib/common/exceptions/DnetException.java create mode 100644 libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailFactory.java create mode 100644 libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailMessage.java diff --git a/apps/dhp-broker-application/pom.xml b/apps/dhp-broker-application/pom.xml index 62af4226..c0f7c74a 100644 --- a/apps/dhp-broker-application/pom.xml +++ b/apps/dhp-broker-application/pom.xml @@ -18,14 +18,6 @@ - - - javax.mail - mail - 1.4.7 - - - eu.dnetlib.dhp diff --git a/libs/dnet-apps-common/pom.xml b/libs/dnet-apps-common/pom.xml index 70631832..16f99e18 100644 --- a/libs/dnet-apps-common/pom.xml +++ b/libs/dnet-apps-common/pom.xml @@ -23,6 +23,12 @@ javax.servlet-api provided + + + + javax.mail + mail + diff --git a/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/exceptions/DnetException.java b/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/exceptions/DnetException.java new file mode 100644 index 00000000..dcd8e519 --- /dev/null +++ b/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/exceptions/DnetException.java @@ -0,0 +1,15 @@ +package eu.dnetlib.common.exceptions; + +public class DnetException extends Exception { + + private static final long serialVersionUID = 1318223089824261627L; + + public DnetException(final String message, final Throwable cause) { + super(message, cause); + } + + public DnetException(final String message) { + super(message); + } + +} diff --git a/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailFactory.java b/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailFactory.java new file mode 100644 index 00000000..2db5874d --- /dev/null +++ b/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailFactory.java @@ -0,0 +1,93 @@ +package eu.dnetlib.common.utils.mail; + +import java.util.Properties; + +import javax.mail.Authenticator; +import javax.mail.PasswordAuthentication; +import javax.mail.Session; + +import org.apache.commons.lang3.StringUtils; + +import eu.dnetlib.common.exceptions.DnetException; + +public class EmailFactory { + + private String smtpHost = "localhost"; + private int smtpPort = 587; + private String smtpUser = null; + private String smtpPassword = ""; + + public EmailMessage prepareEmail(final String subject, + final String content, + final String fromMail, + final String fromName, + final String to, + final String... ccs) throws DnetException { + + final Session session = Session.getInstance(obtainProperties(), obtainAuthenticator()); + + try { + return new EmailMessage(session, subject, content, fromMail, fromName, to, ccs); + } catch (final Exception e) { + throw new DnetException("Error preparing mail message", e); + } + } + + private Properties obtainProperties() { + final Properties p = new Properties(); + p.put("mail.transport.protocol", "smtp"); + p.put("mail.smtp.host", getSmtpHost()); + p.put("mail.smtp.port", getSmtpPort()); + p.put("mail.smtp.auth", Boolean.toString(StringUtils.isNotBlank(getSmtpUser()))); + return p; + } + + private Authenticator obtainAuthenticator() { + if (StringUtils.isBlank(getSmtpUser())) { return null; } + + return new Authenticator() { + + private final PasswordAuthentication authentication = + new PasswordAuthentication(getSmtpUser(), getSmtpPassword()); + + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return authentication; + } + + }; + } + + public String getSmtpHost() { + return smtpHost; + } + + public void setSmtpHost(final String smtpHost) { + this.smtpHost = smtpHost; + } + + public int getSmtpPort() { + return smtpPort; + } + + public void setSmtpPort(final int smtpPort) { + this.smtpPort = smtpPort; + } + + public String getSmtpUser() { + return smtpUser; + } + + public void setSmtpUser(final String smtpUser) { + this.smtpUser = smtpUser; + } + + public String getSmtpPassword() { + return smtpPassword; + } + + public void setSmtpPassword(final String smtpPassword) { + this.smtpPassword = smtpPassword; + } + +} diff --git a/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailMessage.java b/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailMessage.java new file mode 100644 index 00000000..baa1c264 --- /dev/null +++ b/libs/dnet-apps-common/src/main/java/eu/dnetlib/common/utils/mail/EmailMessage.java @@ -0,0 +1,56 @@ +package eu.dnetlib.common.utils.mail; + +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Date; + +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.AddressException; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class EmailMessage { + + private static final Log log = LogFactory.getLog(EmailMessage.class); + + private final MimeMessage mimeMessage; + + protected EmailMessage(final Session session, final String subject, final String content, final String fromMail, final String fromName, final String to, + final String... ccs) + throws MessagingException, UnsupportedEncodingException, AddressException { + + this.mimeMessage = new MimeMessage(session); + + this.mimeMessage.setFrom(new InternetAddress(fromMail, fromName)); + this.mimeMessage.setSubject(subject); + this.mimeMessage.setContent(content, "text/html; charset=utf-8"); + this.mimeMessage.setSentDate(new Date()); + + this.mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); + + for (final String cc : ccs) { + this.mimeMessage.addRecipient(Message.RecipientType.CC, new InternetAddress(cc)); + } + } + + public void sendMailAsync() { + final Thread t = new Thread(() -> sendMail()); + t.start(); + } + + public void sendMail() { + try { + log.info("Sending mail to " + Arrays.toString(mimeMessage.getAllRecipients()) + "..."); + Transport.send(this.mimeMessage); + log.info("...sent"); + } catch (final MessagingException e) { + log.error("Error sending mail", e); + } + } +} diff --git a/pom.xml b/pom.xml index cdc4e256..bceeded4 100644 --- a/pom.xml +++ b/pom.xml @@ -245,6 +245,13 @@ 2.3.2 + + + javax.mail + mail + 1.4.7 + + org.springdoc