This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/causeway.git
commit a9f34689867a62710ca4cb8b06114dc050276b22 Author: Andi Huber <[email protected]> AuthorDate: Wed Jan 24 11:18:41 2024 +0100 CAUSEWAY-3668: removes commons-email --- core/runtimeservices/pom.xml | 57 +++------------- .../runtimeservices/src/main/java/module-info.java | 6 +- .../runtimeservices/email/EmailServiceDefault.java | 77 ++++++++-------------- 3 files changed, 39 insertions(+), 101 deletions(-) diff --git a/core/runtimeservices/pom.xml b/core/runtimeservices/pom.xml index f1b8a346b8..c03ce9d0fb 100644 --- a/core/runtimeservices/pom.xml +++ b/core/runtimeservices/pom.xml @@ -76,6 +76,14 @@ <groupId>jakarta.mail</groupId> <artifactId>jakarta.mail-api</artifactId> </dependency> + <dependency> + <groupId>com.sun.mail</groupId> + <artifactId>jakarta.mail</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context-support</artifactId> + </dependency> <dependency> <groupId>org.apache.causeway.core</groupId> @@ -110,52 +118,7 @@ </dependency> </dependencies> - - <profiles> - <profile> - <id>email-notification-service</id> - <activation> - <property> - <name>!skip.email-notification-service</name> - </property> - </activation> - <dependencies> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-email</artifactId> - <exclusions> - <!-- - excluded because provided by javax:javaee-api - note: moved javax.mail from 1.5.2 to 1.5.0 - note: moved activation from 1.1.1 to 1.1 ... don't know if this is significant. - --> - <exclusion> - <groupId>com.sun.mail</groupId> - <artifactId>javax.mail</artifactId> - </exclusion> - <exclusion> - <groupId>javax.activation</groupId> - <artifactId>activation</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <!-- required by EmailServiceDefault --> - <groupId>com.sun.mail</groupId> - <artifactId>jakarta.mail</artifactId> - <exclusions> - <exclusion> - <groupId>javax.activation</groupId> - <artifactId>activation</artifactId> - </exclusion> - <exclusion> - <groupId>com.sun.activation</groupId> - <artifactId>jakarta.activation</artifactId> - </exclusion> - </exclusions> - </dependency> - </dependencies> - </profile> - </profiles> + + </project> diff --git a/core/runtimeservices/src/main/java/module-info.java b/core/runtimeservices/src/main/java/module-info.java index b0d30034f6..e0ca4c5ce9 100644 --- a/core/runtimeservices/src/main/java/module-info.java +++ b/core/runtimeservices/src/main/java/module-info.java @@ -53,9 +53,8 @@ module org.apache.causeway.core.runtimeservices { exports org.apache.causeway.core.runtimeservices.xml; exports org.apache.causeway.core.runtimeservices.xmlsnapshot; - requires org.apache.commons.mail; - requires jakarta.activation; - requires jakarta.mail; + requires transitive jakarta.activation; + requires transitive jakarta.mail; requires java.annotation; requires java.desktop; requires java.sql; @@ -75,6 +74,7 @@ module org.apache.causeway.core.runtimeservices { requires org.apache.logging.log4j; requires spring.beans; requires spring.context; + requires spring.context.support; requires spring.core; requires spring.tx; requires org.apache.causeway.core.codegen.bytebuddy; diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/email/EmailServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/email/EmailServiceDefault.java index 15115cddeb..15ce3c6abe 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/email/EmailServiceDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/email/EmailServiceDefault.java @@ -20,19 +20,18 @@ package org.apache.causeway.core.runtimeservices.email; import java.util.Collections; import java.util.List; -import java.util.Properties; import javax.activation.DataSource; import javax.annotation.PostConstruct; import javax.annotation.Priority; import javax.inject.Inject; import javax.inject.Named; +import javax.inject.Provider; +import javax.mail.MessagingException; -import org.apache.commons.mail.DefaultAuthenticator; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.ImageHtmlEmail; -import org.apache.commons.mail.resolver.DataSourceClassPathResolver; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import org.apache.causeway.applib.annotation.PriorityPrecedence; @@ -41,6 +40,7 @@ import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices; +import lombok.val; import lombok.extern.log4j.Log4j2; /** @@ -56,13 +56,15 @@ public class EmailServiceDefault implements EmailService { private static final long serialVersionUID = 1L; public static class EmailServiceException extends RuntimeException { static final long serialVersionUID = 1L; - public EmailServiceException(final EmailException cause) { + public EmailServiceException(final Exception cause) { super(cause); } } @Inject private CausewayConfiguration configuration; + @Inject private Provider<JavaMailSender> emailSenderProvider; + // -- INIT private boolean initialized; @@ -142,6 +144,7 @@ public class EmailServiceDefault implements EmailService { return !_Strings.isNullOrEmpty(senderEmailAddress) && !_Strings.isNullOrEmpty(senderEmailPassword); } + @Override public boolean send( final List<String> toList, @@ -152,76 +155,48 @@ public class EmailServiceDefault implements EmailService { final DataSource... attachments) { try { - final ImageHtmlEmail email = new ImageHtmlEmail(); - - final String senderEmailUsername = getSenderEmailUsername(); - final String senderEmailAddress = getSenderEmailAddress(); - final String senderEmailPassword = getSenderEmailPassword(); - final String senderEmailHostName = getSenderEmailHostName(); - final Integer senderEmailPort = getSenderEmailPort(); - final Boolean senderEmailTlsEnabled = getSenderEmailTlsEnabled(); - final int socketTimeout = getSocketTimeout(); - final int socketConnectionTimeout = getSocketConnectionTimeout(); - - if (senderEmailUsername != null) { - email.setAuthenticator(new DefaultAuthenticator(senderEmailUsername, senderEmailPassword)); - } else { - email.setAuthenticator(new DefaultAuthenticator(senderEmailAddress, senderEmailPassword)); - } - email.setHostName(senderEmailHostName); - email.setSmtpPort(senderEmailPort); - email.setStartTLSEnabled(senderEmailTlsEnabled); - email.setDataSourceResolver(new DataSourceClassPathResolver("/", true)); - email.setSocketTimeout(socketTimeout); - email.setSocketConnectionTimeout(socketConnectionTimeout); + val javaMailSender = emailSenderProvider.get(); - final Properties properties = email.getMailSession().getProperties(); + val email = javaMailSender.createMimeMessage(); + val emailHelper = new MimeMessageHelper(email, true); - properties.put("mail.smtps.auth", "true"); - properties.put("mail.debug", "true"); - properties.put("mail.smtps.port", "" + senderEmailPort); - properties.put("mail.smtps.socketFactory.port", "" + senderEmailPort); - properties.put("mail.smtps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); - properties.put("mail.smtps.socketFactory.fallback", "false"); - properties.put("mail.smtp.starttls.enable", "" + senderEmailTlsEnabled); + emailHelper.setFrom(getSenderEmailAddress()); - email.setFrom(senderEmailAddress); + emailHelper.setSubject(subject); + boolean html = true; + emailHelper.setText(body, html); - email.setSubject(subject); - email.setHtmlMsg(body); - - if (attachments != null && attachments.length > 0) { + if (attachments != null) { for (DataSource attachment : attachments) { - email.attach(attachment, attachment.getName(), ""); + emailHelper.addAttachment(attachment.getName(), attachment); } } - final String overrideToList = getEmailOverrideTo(); final String overrideCc = getEmailOverrideCc(); final String overrideBcc = getEmailOverrideBcc(); final String[] toListElseOverride = originalUnlessOverridden(toList, overrideToList); if (notEmpty(toListElseOverride)) { - email.addTo(toListElseOverride); + emailHelper.setTo(toListElseOverride); } final String[] ccListElseOverride = originalUnlessOverridden(ccList, overrideCc); if (notEmpty(ccListElseOverride)) { - email.addCc(ccListElseOverride); + emailHelper.setCc(ccListElseOverride); } final String[] bccListElseOverride = originalUnlessOverridden(bccList, overrideBcc); if (notEmpty(bccListElseOverride)) { - email.addBcc(bccListElseOverride); + emailHelper.setBcc(bccListElseOverride); } - email.send(); + javaMailSender.send(email); - } catch (EmailException ex) { - log.error("An error occurred while trying to send an email", ex); + } catch (MessagingException e) { + log.error("An error occurred while trying to send an email", e); final Boolean throwExceptionOnFail = isThrowExceptionOnFail(); if (throwExceptionOnFail) { - throw new EmailServiceException(ex); + throw new EmailServiceException(e); } return false; } @@ -246,4 +221,4 @@ public class EmailServiceDefault implements EmailService { -} +} \ No newline at end of file
