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

Reply via email to