This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/spring6 by this push:
new c581440c38 CAUSEWAY-3668: removes commons-email
c581440c38 is described below
commit c581440c388d58fe893a62c26808401fffbd6873
Author: Andi Huber <[email protected]>
AuthorDate: Wed Jan 24 11:02:16 2024 +0100
CAUSEWAY-3668: removes commons-email
---
bom/pom.xml | 18 ----
core/runtimeservices/pom.xml | 60 ++-----------
.../runtimeservices/src/main/java/module-info.java | 8 +-
.../runtimeservices/email/EmailServiceDefault.java | 98 ++++++++--------------
4 files changed, 46 insertions(+), 138 deletions(-)
diff --git a/bom/pom.xml b/bom/pom.xml
index f9e317d6d9..0b5bd0bc45 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -1687,24 +1687,6 @@ It is therefore a copy of org.apache:apache, with
customisations clearly identif
</exclusions>
</dependency>
- <!-- TODO: when used, move exclusions down -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-email</artifactId>
- <version>${commons-email.version}</version>
- <exclusions>
- <!-- excluded because provided by
javax:javaee-api -->
- <exclusion>
- <groupId>com.sun.mail</groupId>
-
<artifactId>javax.mail</artifactId>
- </exclusion>
- <exclusion>
-
<groupId>javax.activation</groupId>
-
<artifactId>activation</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
diff --git a/core/runtimeservices/pom.xml b/core/runtimeservices/pom.xml
index b71c27a305..4d381fc121 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>org.eclipse.angus</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,57 +118,5 @@
</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>
- <exclusion>
-
<groupId>com.sun.activation</groupId>
-
<artifactId>jakarta.activation</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <!-- required by EmailServiceDefault on v2, n/a f. v3
- <dependency>
- <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 489e7a5b67..6da231f7d4 100644
--- a/core/runtimeservices/src/main/java/module-info.java
+++ b/core/runtimeservices/src/main/java/module-info.java
@@ -53,10 +53,9 @@ 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 jakarta.annotation;
+ requires transitive jakarta.activation;
+ requires transitive jakarta.mail;
+ requires transitive jakarta.annotation;
requires java.desktop;
requires java.sql;
requires java.xml;
@@ -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 99cc37dbbc..0452f4cb06 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 jakarta.activation.DataSource; TODO[CAUSEWAY-3275] incompatible with
commons-email 1.6.0
+import jakarta.activation.DataSource;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Priority;
import jakarta.inject.Inject;
import jakarta.inject.Named;
+import jakarta.inject.Provider;
+import jakarta.mail.MessagingException;
-//import org.apache.commons.mail.DefaultAuthenticator; TODO[CAUSEWAY-3275]
-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,
@@ -149,82 +152,51 @@ public class EmailServiceDefault implements EmailService {
final List<String> bccList,
final String subject,
final String body,
- final jakarta.activation.DataSource... attachments) {
+ 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();
-
-//TODO[CAUSEWAY-3275] commons email not available for jakarta API
-// 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);
-
-//TODO[CAUSEWAY-3275] commons email not available for jakarta API
-// final Properties properties =
email.getMailSession().getProperties();
- final var properties = new Properties();
-
- 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);
-
- email.setFrom(senderEmailAddress);
-
- email.setSubject(subject);
- email.setHtmlMsg(body);
-
- if (attachments != null && attachments.length > 0) {
- for (jakarta.activation.DataSource attachment : attachments) {
- //email.attach(attachment, attachment.getName(), "");
TODO[CAUSEWAY-3275] incompatible with commons-email 1.6.0
+
+ val javaMailSender = emailSenderProvider.get();
+
+ val email = javaMailSender.createMimeMessage();
+ val emailHelper = new MimeMessageHelper(email, true);
+
+ emailHelper.setFrom(getSenderEmailAddress());
+
+ emailHelper.setSubject(subject);
+ boolean html = true;
+ emailHelper.setText(body, html);
+
+ if (attachments != null) {
+ for (DataSource attachment : attachments) {
+ 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;
}
@@ -247,6 +219,4 @@ public class EmailServiceDefault implements EmailService {
return addresses != null && addresses.length > 0;
}
-
-
-}
+}
\ No newline at end of file