You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/10/27 09:14:58 UTC

[james-project] branch master updated: JAMES-3477 Some email sent via the mailet context were never disposed (#712)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 3009ea6  JAMES-3477 Some email sent via the mailet context were never disposed (#712)
3009ea6 is described below

commit 3009ea62fb5cde1bd2c6db1d6579ba12b5e7739e
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Wed Oct 27 16:14:55 2021 +0700

    JAMES-3477 Some email sent via the mailet context were never disposed (#712)
---
 .../james/blob/export/file/LocalFileBlobExportMechanism.java     | 7 ++++++-
 .../java/org/apache/james/healthcheck/MailReceptionCheck.java    | 9 ++++++---
 .../james/transport/mailets/RecipientRewriteTableProcessor.java  | 1 +
 .../apache/james/transport/mailets/delivery/MailDispatcher.java  | 2 ++
 .../james/transport/mailets/jsieve/delivery/SieveExecutor.java   | 1 +
 5 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java b/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
index e6aec2b..4925775 100644
--- a/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
+++ b/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
@@ -39,6 +39,7 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.server.core.MailImpl;
 import org.apache.mailet.MailetContext;
 
@@ -147,7 +148,11 @@ public class LocalFileBlobExportMechanism implements BlobExportMechanism {
                 .mimeMessage(mimeMessage)
                 .build();
 
-            mailetContext.sendMail(mail);
+            try {
+                mailetContext.sendMail(mail);
+            } finally {
+                LifecycleUtil.dispose(mail);
+            }
         } catch (Exception e) {
             throw new BlobExportException("Error while sending email", e);
         }
diff --git a/server/container/feature-checks/src/main/java/org/apache/james/healthcheck/MailReceptionCheck.java b/server/container/feature-checks/src/main/java/org/apache/james/healthcheck/MailReceptionCheck.java
index 97ef6ea..ef8fe10 100644
--- a/server/container/feature-checks/src/main/java/org/apache/james/healthcheck/MailReceptionCheck.java
+++ b/server/container/feature-checks/src/main/java/org/apache/james/healthcheck/MailReceptionCheck.java
@@ -39,6 +39,7 @@ import org.apache.james.core.healthcheck.Result;
 import org.apache.james.events.Event;
 import org.apache.james.events.EventBus;
 import org.apache.james.events.EventListener;
+import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -254,8 +255,8 @@ public class MailReceptionCheck implements HealthCheck {
         Content content = Content.generate();
 
         return Mono.fromCallable(() -> usersRepository.getMailAddressFor(username))
-            .flatMap(address -> Mono.fromRunnable(Throwing.runnable(() ->
-                mailetContext.sendMail(MailImpl.builder()
+            .flatMap(address ->
+                Mono.using(() -> MailImpl.builder()
                     .name(content.asString())
                     .sender(address)
                     .addRecipient(address)
@@ -264,7 +265,9 @@ public class MailReceptionCheck implements HealthCheck {
                         .addToRecipient(address.asString())
                         .setSubject(content.asString())
                         .setText(content.asString()))
-                    .build()))))
+                    .build(),
+                    mail -> Mono.fromRunnable(Throwing.runnable(() -> mailetContext.sendMail(mail))),
+                    LifecycleUtil::dispose))
             .thenReturn(content);
     }
 }
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
index 802a43f..df1cdc6 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
@@ -203,6 +203,7 @@ public class RecipientRewriteTableProcessor {
                 .state(errorProcessor)
                 .build();
             mailetContext.sendMail(newMail);
+            LifecycleUtil.dispose(newMail);
         }
 
         if (executionResults.newRecipients.isEmpty()) {
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
index 2a7bf6a..4e8d61b 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
@@ -29,6 +29,7 @@ import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.server.core.MailImpl;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetContext;
@@ -114,6 +115,7 @@ public class MailDispatcher {
                 .state(Mail.ERROR)
                 .build();
             mailetContext.sendMail(newMail);
+            LifecycleUtil.dispose(newMail);
         }
         if (consume) {
             // Consume this message
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
index d86cba0..df394a6 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
@@ -164,5 +164,6 @@ public class SieveExecutor {
             .build();
 
         mailetContext.sendMail(errorMail);
+        errorMail.dispose();
     }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org