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

davsclaus pushed a commit to branch msc
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 42ebca7c135009da18fcca259709dcf9e0de5e38
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Jun 25 11:10:14 2024 +0200

    CAMEL-20907: camel-mail - PollEnrich should work with stream caching to 
ignore if folder is not open.
---
 .../camel/component/mail/MailConverters.java       | 35 ++++++++++++++--------
 .../mail/MailAttachmentPollEnrichTest.java         |  8 ++++-
 2 files changed, 29 insertions(+), 14 deletions(-)

diff --git 
a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
 
b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
index 0abdeadd5ba..846c8f18168 100644
--- 
a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
+++ 
b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
@@ -80,21 +80,30 @@ public final class MailConverters {
      */
     @Converter
     public static String toString(Multipart multipart) throws 
MessagingException, IOException {
-        int size = multipart.getCount();
-        for (int i = 0; i < size; i++) {
-            BodyPart part = multipart.getBodyPart(i);
-            Object content = part.getContent();
-            while (content instanceof MimeMultipart) {
-                if (multipart.getCount() < 1) {
-                    break;
+        try {
+            int size = multipart.getCount();
+            for (int i = 0; i < size; i++) {
+                BodyPart part = multipart.getBodyPart(i);
+                Object content = part.getContent();
+                while (content instanceof MimeMultipart) {
+                    if (multipart.getCount() < 1) {
+                        break;
+                    }
+                    part = ((MimeMultipart) content).getBodyPart(0);
+                    content = part.getContent();
+                }
+                // Perform a case-insensitive "startsWith" check that works 
for different locales
+                String prefix = "text";
+                if (part.getContentType().regionMatches(true, 0, prefix, 0, 
prefix.length())) {
+                    return part.getContent().toString();
                 }
-                part = ((MimeMultipart) content).getBodyPart(0);
-                content = part.getContent();
             }
-            // Perform a case insensitive "startsWith" check that works for 
different locales
-            String prefix = "text";
-            if (part.getContentType().regionMatches(true, 0, prefix, 0, 
prefix.length())) {
-                return part.getContent().toString();
+        } catch (MessagingException e) {
+            Throwable cause = e.getCause();
+            if (cause != null && "Folder is not 
Open".equals(cause.getMessage())) {
+                // ignore if folder is not open and we cannot read the mail
+            } else {
+                throw e;
             }
         }
         return null;
diff --git 
a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentPollEnrichTest.java
 
b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentPollEnrichTest.java
index ae81d4f7eb9..d6f93411dda 100644
--- 
a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentPollEnrichTest.java
+++ 
b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentPollEnrichTest.java
@@ -107,13 +107,19 @@ public class MailAttachmentPollEnrichTest extends 
CamelTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("direct:start").streamCache("false")
+                from("direct:start")
                         .pollEnrich(james.uriPrefix(Protocol.pop3) + 
"&initialDelay=100&delay=100", 5000)
                         .process(e -> {
                             AttachmentMessage attachmentMessage = 
e.getIn(AttachmentMessage.class);
                             Map<String, DataHandler> attachments = 
attachmentMessage.getAttachments();
                             assertEquals(1, attachments.size());
                             assertEquals("logo.jpeg", 
attachments.keySet().iterator().next());
+
+                            DataHandler dh = 
attachments.values().iterator().next();
+                            byte[] data = 
context.getTypeConverter().convertTo(byte[].class, e, dh.getInputStream());
+                            assertNotNull(data);
+                            // should be logo that are 10.000 bytes or longer
+                            assertTrue(data.length > 10000, "Should be 10000 
bytes or more");
                         })
                         .to("mock:result");
             }

Reply via email to