Browse Source

fix: preserve multipart IMAP body structure

AI-Co-Authored-By: Codex
chendeben 1 month ago
parent
commit
be0baa7a72
2 changed files with 2 additions and 3 deletions
  1. 1 1
      src/mail-access.js
  2. 1 2
      test/mail-access.test.js

+ 1 - 1
src/mail-access.js

@@ -812,7 +812,7 @@ function imapBodyStructure(message) {
 
 
 function imapMimeNodeStructure(node) {
 function imapMimeNodeStructure(node) {
   if (node.children.length) {
   if (node.children.length) {
-    return `(${node.children.map(imapMimeNodeStructure).join(' ')}) ${imapNString(node.contentType.subtype.toUpperCase())} ${imapBodyParameters(node.contentType.parameters)}`;
+    return `(${node.children.map(imapMimeNodeStructure).join(' ')} ${imapNString(node.contentType.subtype.toUpperCase())} ${imapBodyParameters(node.contentType.parameters)})`;
   }
   }
 
 
   const values = [
   const values = [

+ 1 - 2
test/mail-access.test.js

@@ -113,8 +113,7 @@ test('IMAP exposes MIME body structures and individual parts for Roundcube', asy
     await client.command('A2 SELECT INBOX', /A2 OK/);
     await client.command('A2 SELECT INBOX', /A2 OK/);
 
 
     const structure = await client.command('A3 UID FETCH 1 (UID BODYSTRUCTURE)', /A3 OK/);
     const structure = await client.command('A3 UID FETCH 1 (UID BODYSTRUCTURE)', /A3 OK/);
-    assert.match(structure, /BODYSTRUCTURE \(\("TEXT" "PLAIN" \("CHARSET" "UTF-8"\)/);
-    assert.match(structure, /"HTML" \("CHARSET" "UTF-8"\).*"ALTERNATIVE" \("BOUNDARY" "mailhub-boundary"\)\)/);
+    assert.match(structure, /BODYSTRUCTURE \(\("TEXT" "PLAIN" \("CHARSET" "UTF-8"\).*\) \("TEXT" "HTML" \("CHARSET" "UTF-8"\).*\) "ALTERNATIVE" \("BOUNDARY" "mailhub-boundary"\)\)/);
 
 
     const textPart = await client.command('A4 UID FETCH 1 (BODY.PEEK[1])', /A4 OK/);
     const textPart = await client.command('A4 UID FETCH 1 (BODY.PEEK[1])', /A4 OK/);
     assert.match(textPart, /BODY\[1\] \{\d+\}\r\nPlain message body\./);
     assert.match(textPart, /BODY\[1\] \{\d+\}\r\nPlain message body\./);