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

quantranhong1999 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 6b39077850 [FIX] Avoid 500 upon Mail repository download (#3064)
6b39077850 is described below

commit 6b39077850b06273f4091d499146c8a852ef7ab0
Author: Benoit TELLIER <[email protected]>
AuthorDate: Tue Jun 16 11:36:23 2026 +0200

    [FIX] Avoid 500 upon Mail repository download (#3064)
---
 .../webadmin/routes/MailRepositoriesRoutes.java    | 27 +++++++++++-----------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
 
b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index c1a986c1ce..b8c83e5bb7 100644
--- 
a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -19,8 +19,8 @@
 
 package org.apache.james.webadmin.routes;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.OutputStream;
 import java.time.Clock;
 import java.time.Duration;
 import java.time.Instant;
@@ -34,7 +34,6 @@ import jakarta.mail.MessagingException;
 import jakarta.mail.internet.MimeMessage;
 import jakarta.servlet.http.HttpServletResponse;
 
-import org.apache.commons.io.output.CountingOutputStream;
 import org.apache.james.core.MailAddress;
 import org.apache.james.mailrepository.api.MailKey;
 import org.apache.james.mailrepository.api.MailRepository;
@@ -204,17 +203,19 @@ public class MailRepositoriesRoutes implements Routes {
                 response.raw()));
     }
 
-    private Object writeMimeMessage(MimeMessage mimeMessage, 
HttpServletResponse rawResponse) throws MessagingException, IOException {
-        rawResponse.setContentType(Constants.RFC822_CONTENT_TYPE);
-        rawResponse.setHeader("Content-Length", 
String.valueOf(computeExactSize(mimeMessage)));
-        mimeMessage.writeTo(rawResponse.getOutputStream());
-        return rawResponse;
-    }
-
-    private long computeExactSize(MimeMessage mimeMessage) throws IOException, 
MessagingException {
-        CountingOutputStream countingOutputStream = new 
CountingOutputStream(OutputStream.nullOutputStream());
-        mimeMessage.writeTo(countingOutputStream);
-        return countingOutputStream.getByteCount();
+    private Object writeMimeMessage(MimeMessage mimeMessage, 
HttpServletResponse rawResponse) {
+        try {
+            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+            mimeMessage.writeTo(buffer);
+
+            rawResponse.setContentType(Constants.RFC822_CONTENT_TYPE);
+            rawResponse.setHeader("Content-Length", 
String.valueOf(buffer.size()));
+            buffer.writeTo(rawResponse.getOutputStream());
+            rawResponse.flushBuffer();
+            return rawResponse;
+        } catch (MessagingException | IOException e) {
+            throw internalServerError(e);
+        }
     }
 
     private MimeMessage getMailAsMimeMessage(MailRepositoryPath path, MailKey 
mailKey) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to