parent
377e44b6ca
commit
3f6d1eb29b
|
@ -70,6 +70,11 @@
|
||||||
<artifactId>jakarta.servlet-api</artifactId>
|
<artifactId>jakarta.servlet-api</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.mail</groupId>
|
||||||
|
<artifactId>jakarta.mail-api</artifactId>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- test dependencies -->
|
<!-- test dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -28,8 +28,8 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import javax.mail.internet.InternetAddress;
|
import jakarta.mail.internet.InternetAddress;
|
||||||
import javax.mail.internet.MimeMessage;
|
import jakarta.mail.internet.MimeMessage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -17,8 +17,8 @@ import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.mail.internet.InternetAddress;
|
import jakarta.mail.internet.InternetAddress;
|
||||||
import javax.mail.internet.MimeMessage;
|
import jakarta.mail.internet.MimeMessage;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
|
@ -26,8 +26,8 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import javax.mail.internet.InternetAddress;
|
import jakarta.mail.internet.InternetAddress;
|
||||||
import javax.mail.internet.MimeMessage;
|
import jakarta.mail.internet.MimeMessage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -79,25 +79,11 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.simplejavamail</groupId>
|
<groupId>org.simplejavamail</groupId>
|
||||||
<artifactId>simple-java-mail</artifactId>
|
<artifactId>simple-java-mail</artifactId>
|
||||||
<!-- Excluded in favor of jakarta.activation:jakarta.activation-api -->
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>com.sun.activation</groupId>
|
|
||||||
<artifactId>jakarta.activation</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.icegreen</groupId>
|
<groupId>com.icegreen</groupId>
|
||||||
<artifactId>greenmail</artifactId>
|
<artifactId>greenmail</artifactId>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<!-- Excluded in favor of jakarta.activation:jakarta.activation-api -->
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>com.sun.activation</groupId>
|
|
||||||
<artifactId>jakarta.activation</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,9 @@ package ca.uhn.fhir.rest.server.mail;
|
||||||
|
|
||||||
import jakarta.annotation.Nonnull;
|
import jakarta.annotation.Nonnull;
|
||||||
import org.simplejavamail.api.email.Email;
|
import org.simplejavamail.api.email.Email;
|
||||||
import org.simplejavamail.api.mailer.AsyncResponse;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public interface IMailSvc {
|
public interface IMailSvc {
|
||||||
void sendMail(@Nonnull List<Email> theEmails);
|
void sendMail(@Nonnull List<Email> theEmails);
|
||||||
|
@ -31,7 +31,5 @@ public interface IMailSvc {
|
||||||
void sendMail(@Nonnull Email theEmail);
|
void sendMail(@Nonnull Email theEmail);
|
||||||
|
|
||||||
void sendMail(
|
void sendMail(
|
||||||
@Nonnull Email theEmail,
|
@Nonnull Email theEmail, @Nonnull Runnable theOnSuccess, @Nonnull Consumer<Throwable> theErrorHandler);
|
||||||
@Nonnull Runnable theOnSuccess,
|
|
||||||
@Nonnull AsyncResponse.ExceptionConsumer theErrorHandler);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,9 @@
|
||||||
package ca.uhn.fhir.rest.server.mail;
|
package ca.uhn.fhir.rest.server.mail;
|
||||||
|
|
||||||
import jakarta.annotation.Nonnull;
|
import jakarta.annotation.Nonnull;
|
||||||
import org.apache.commons.lang3.Validate;
|
|
||||||
import org.simplejavamail.MailException;
|
import org.simplejavamail.MailException;
|
||||||
import org.simplejavamail.api.email.Email;
|
import org.simplejavamail.api.email.Email;
|
||||||
import org.simplejavamail.api.email.Recipient;
|
import org.simplejavamail.api.email.Recipient;
|
||||||
import org.simplejavamail.api.mailer.AsyncResponse;
|
|
||||||
import org.simplejavamail.api.mailer.AsyncResponse.ExceptionConsumer;
|
|
||||||
import org.simplejavamail.api.mailer.Mailer;
|
import org.simplejavamail.api.mailer.Mailer;
|
||||||
import org.simplejavamail.api.mailer.config.TransportStrategy;
|
import org.simplejavamail.api.mailer.config.TransportStrategy;
|
||||||
import org.simplejavamail.mailer.MailerBuilder;
|
import org.simplejavamail.mailer.MailerBuilder;
|
||||||
|
@ -33,6 +30,8 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class MailSvc implements IMailSvc {
|
public class MailSvc implements IMailSvc {
|
||||||
|
@ -42,14 +41,14 @@ public class MailSvc implements IMailSvc {
|
||||||
private final Mailer myMailer;
|
private final Mailer myMailer;
|
||||||
|
|
||||||
public MailSvc(@Nonnull MailConfig theMailConfig) {
|
public MailSvc(@Nonnull MailConfig theMailConfig) {
|
||||||
Validate.notNull(theMailConfig);
|
Objects.requireNonNull(theMailConfig);
|
||||||
myMailConfig = theMailConfig;
|
myMailConfig = theMailConfig;
|
||||||
myMailer = makeMailer(myMailConfig);
|
myMailer = makeMailer(myMailConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMail(@Nonnull List<Email> theEmails) {
|
public void sendMail(@Nonnull List<Email> theEmails) {
|
||||||
Validate.notNull(theEmails);
|
Objects.requireNonNull(theEmails);
|
||||||
theEmails.forEach(theEmail -> send(theEmail, new OnSuccess(theEmail), new ErrorHandler(theEmail)));
|
theEmails.forEach(theEmail -> send(theEmail, new OnSuccess(theEmail), new ErrorHandler(theEmail)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,21 +59,23 @@ public class MailSvc implements IMailSvc {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMail(
|
public void sendMail(
|
||||||
@Nonnull Email theEmail, @Nonnull Runnable theOnSuccess, @Nonnull ExceptionConsumer theErrorHandler) {
|
@Nonnull Email theEmail, @Nonnull Runnable theOnSuccess, @Nonnull Consumer<Throwable> theErrorHandler) {
|
||||||
send(theEmail, theOnSuccess, theErrorHandler);
|
send(theEmail, theOnSuccess, theErrorHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void send(
|
private void send(
|
||||||
@Nonnull Email theEmail, @Nonnull Runnable theOnSuccess, @Nonnull ExceptionConsumer theErrorHandler) {
|
@Nonnull Email theEmail, @Nonnull Runnable theOnSuccess, @Nonnull Consumer<Throwable> theErrorHandler) {
|
||||||
Validate.notNull(theEmail);
|
Objects.requireNonNull(theEmail);
|
||||||
Validate.notNull(theOnSuccess);
|
Objects.requireNonNull(theOnSuccess);
|
||||||
Validate.notNull(theErrorHandler);
|
Objects.requireNonNull(theErrorHandler);
|
||||||
try {
|
try {
|
||||||
final AsyncResponse asyncResponse = myMailer.sendMail(theEmail, true);
|
myMailer.sendMail(theEmail, true).whenComplete((result, ex) -> {
|
||||||
if (asyncResponse != null) {
|
if (ex != null) {
|
||||||
asyncResponse.onSuccess(theOnSuccess);
|
theErrorHandler.accept(ex);
|
||||||
asyncResponse.onException(theErrorHandler);
|
} else {
|
||||||
|
theOnSuccess.run();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
} catch (MailException e) {
|
} catch (MailException e) {
|
||||||
theErrorHandler.accept(e);
|
theErrorHandler.accept(e);
|
||||||
}
|
}
|
||||||
|
@ -117,7 +118,7 @@ public class MailSvc implements IMailSvc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ErrorHandler implements ExceptionConsumer {
|
private class ErrorHandler implements Consumer<Throwable> {
|
||||||
private final Email myEmail;
|
private final Email myEmail;
|
||||||
|
|
||||||
private ErrorHandler(@Nonnull Email theEmail) {
|
private ErrorHandler(@Nonnull Email theEmail) {
|
||||||
|
@ -125,7 +126,7 @@ public class MailSvc implements IMailSvc {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(Exception t) {
|
public void accept(Throwable t) {
|
||||||
ourLog.error("Email not sent" + makeMessage(myEmail), t);
|
ourLog.error("Email not sent" + makeMessage(myEmail), t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.icegreen.greenmail.junit5.GreenMailExtension;
|
||||||
import com.icegreen.greenmail.util.GreenMailUtil;
|
import com.icegreen.greenmail.util.GreenMailUtil;
|
||||||
import com.icegreen.greenmail.util.ServerSetupTest;
|
import com.icegreen.greenmail.util.ServerSetupTest;
|
||||||
import jakarta.annotation.Nonnull;
|
import jakarta.annotation.Nonnull;
|
||||||
|
import jakarta.mail.internet.MimeMessage;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
@ -11,7 +12,6 @@ import org.simplejavamail.MailException;
|
||||||
import org.simplejavamail.api.email.Email;
|
import org.simplejavamail.api.email.Email;
|
||||||
import org.simplejavamail.email.EmailBuilder;
|
import org.simplejavamail.email.EmailBuilder;
|
||||||
|
|
||||||
import javax.mail.internet.MimeMessage;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -86,13 +86,14 @@ public class MailSvcIT {
|
||||||
@Test
|
@Test
|
||||||
public void testSendMailWithInvalidToAddressExpectErrorHandler() {
|
public void testSendMailWithInvalidToAddressExpectErrorHandler() {
|
||||||
// setup
|
// setup
|
||||||
final Email email = withEmail("xyz");
|
String invalidEmailAdress = "xyz";
|
||||||
|
final Email email = withEmail(invalidEmailAdress);
|
||||||
// execute
|
// execute
|
||||||
fixture.sendMail(email,
|
fixture.sendMail(email,
|
||||||
() -> fail("Should not execute on Success"),
|
() -> fail("Should not execute on Success"),
|
||||||
(e) -> {
|
(e) -> {
|
||||||
assertTrue(e instanceof MailException);
|
assertTrue(e instanceof MailException);
|
||||||
assertEquals("Invalid TO address: " + email, e.getMessage());
|
assertEquals("Invalid TO address: " + invalidEmailAdress, e.getMessage());
|
||||||
});
|
});
|
||||||
// validate
|
// validate
|
||||||
assertTrue(ourGreenMail.waitForIncomingEmail(1000, 0));
|
assertTrue(ourGreenMail.waitForIncomingEmail(1000, 0));
|
||||||
|
|
33
pom.xml
33
pom.xml
|
@ -1161,27 +1161,38 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.simplejavamail</groupId>
|
<groupId>org.simplejavamail</groupId>
|
||||||
<artifactId>simple-java-mail</artifactId>
|
<artifactId>simple-java-mail</artifactId>
|
||||||
<version>6.6.1</version>
|
<version>8.11.2</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>com.sun.activation</groupId>
|
<groupId>com.github.bbottema</groupId>
|
||||||
<artifactId>jakarta.activation-api</artifactId>
|
<artifactId>jetbrains-runtime-annotations</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>com.sun.activation</groupId>
|
<groupId>jakarta.mail</groupId>
|
||||||
<artifactId>jakarta.activation</artifactId>
|
<artifactId>jakarta.mail-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.mail</groupId>
|
||||||
|
<artifactId>jakarta.mail-api</artifactId>
|
||||||
|
<version>2.1.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.icegreen</groupId>
|
||||||
|
<artifactId>greenmail</artifactId>
|
||||||
|
<version>2.1.0-rc-1</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>jakarta.mail</groupId>
|
||||||
|
<artifactId>jakarta.mail-api</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.icegreen</groupId>
|
|
||||||
<artifactId>greenmail</artifactId>
|
|
||||||
<version>1.6.4</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.icegreen</groupId>
|
<groupId>com.icegreen</groupId>
|
||||||
<artifactId>greenmail-junit5</artifactId>
|
<artifactId>greenmail-junit5</artifactId>
|
||||||
<version>1.6.4</version>
|
<version>2.1.0-rc-1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- mail end -->
|
<!-- mail end -->
|
||||||
|
|
Loading…
Reference in New Issue