From e35c246757eec3b37887d20dbfe19602be3ec4fa Mon Sep 17 00:00:00 2001 From: Dream Hunter Date: Sat, 14 Mar 2026 02:52:13 +0800 Subject: [PATCH] fix: mail-parser-wasm missing message/rfc822 attachments (#897) * fix: mail-parser-wasm treat message/rfc822 attachments as regular attachments Previously, message/rfc822 attachments (e.g. .eml files) were recursively parsed for sub-attachments instead of being returned directly, causing them to be silently dropped. Now all attachments are returned regardless of type. Bump version to 0.2.2. Add .gitignore for worker build artifacts. Co-Authored-By: Claude Opus 4.6 * chore: add missing entries to worker .gitignore Co-Authored-By: Claude Opus 4.6 * chore: bump mail-parser-wasm to 0.2.2 in frontend Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- frontend/package.json | 2 +- frontend/pnpm-lock.yaml | 10 ++--- mail-parser-wasm/Cargo.toml | 2 +- mail-parser-wasm/src/lib.rs | 55 ++++++++++++---------------- mail-parser-wasm/worker/.gitignore | 5 +++ mail-parser-wasm/worker/package.json | 2 +- 6 files changed, 36 insertions(+), 40 deletions(-) create mode 100644 mail-parser-wasm/worker/.gitignore diff --git a/frontend/package.json b/frontend/package.json index c9a63d5..cba0b75 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -31,7 +31,7 @@ "axios": "^1.13.6", "dompurify": "^3.3.3", "jszip": "^3.10.1", - "mail-parser-wasm": "^0.2.1", + "mail-parser-wasm": "^0.2.2", "naive-ui": "^2.44.1", "postal-mime": "^2.7.3", "vooks": "^0.2.12", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 9e3a6a9..228b0f9 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -36,8 +36,8 @@ importers: specifier: ^3.10.1 version: 3.10.1 mail-parser-wasm: - specifier: ^0.2.1 - version: 0.2.1 + specifier: ^0.2.2 + version: 0.2.2 naive-ui: specifier: ^2.44.1 version: 2.44.1(vue@3.5.30(typescript@5.4.5)) @@ -2355,8 +2355,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mail-parser-wasm@0.2.1: - resolution: {integrity: sha512-ba1s8Ah9UI0AhEGCzf61h0wYOE4Wg/iceRZ7GCFrEldJjf3AAIDFdZVK853nwxIVE/bLnr0dJzrR7RxB9aGSlA==} + mail-parser-wasm@0.2.2: + resolution: {integrity: sha512-Am8xdpbDFkMBMOLW5ncTgIMT4ikCG7v42S02oXkUHwSvF00xn/LvWsWCnp2BY9Jlmy30Dq7cT3V3R8gTbr005w==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -5570,7 +5570,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mail-parser-wasm@0.2.1: {} + mail-parser-wasm@0.2.2: {} math-intrinsics@1.1.0: {} diff --git a/mail-parser-wasm/Cargo.toml b/mail-parser-wasm/Cargo.toml index 07f5652..88a1db0 100644 --- a/mail-parser-wasm/Cargo.toml +++ b/mail-parser-wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mail-parser-wasm" -version = "0.2.1" +version = "0.2.2" edition = "2021" description = "A simple mail parser for wasm" license = "MIT" diff --git a/mail-parser-wasm/src/lib.rs b/mail-parser-wasm/src/lib.rs index e10b864..fe53434 100644 --- a/mail-parser-wasm/src/lib.rs +++ b/mail-parser-wasm/src/lib.rs @@ -101,38 +101,29 @@ impl MessageResult { pub fn parse_attachment(message: &mail_parser::Message) -> Vec { let mut attachments: Vec = Vec::new(); for attachment in message.attachments() { - if !attachment.is_message() { - attachments.push(AttachmentResult { - content_id: attachment - .content_id() - .map(|id| id.to_owned()) - .unwrap_or(String::new()), - content_type: attachment - .content_type() - .map(|ct| { - let c_type = ct.c_type.clone().into_owned(); - let c_subtype = ct.c_subtype.clone(); - if c_subtype.is_none() { - return c_type; - } else { - return format!("{}/{}", c_type, c_subtype.unwrap()); - } - }) - .unwrap_or(String::new()), - filename: attachment - .attachment_name() - .map(|name| name.to_owned()) - .unwrap_or(String::new()), - content: attachment.contents().to_vec(), - }); - } else { - attachments.append( - &mut attachment - .message() - .map(|msg| parse_attachment(msg)) - .unwrap_or(Vec::new()), - ); - } + attachments.push(AttachmentResult { + content_id: attachment + .content_id() + .map(|id| id.to_owned()) + .unwrap_or(String::new()), + content_type: attachment + .content_type() + .map(|ct| { + let c_type = ct.c_type.clone().into_owned(); + let c_subtype = ct.c_subtype.clone(); + if c_subtype.is_none() { + return c_type; + } else { + return format!("{}/{}", c_type, c_subtype.unwrap()); + } + }) + .unwrap_or(String::new()), + filename: attachment + .attachment_name() + .map(|name| name.to_owned()) + .unwrap_or(String::new()), + content: attachment.contents().to_vec(), + }); } attachments } diff --git a/mail-parser-wasm/worker/.gitignore b/mail-parser-wasm/worker/.gitignore new file mode 100644 index 0000000..95e50df --- /dev/null +++ b/mail-parser-wasm/worker/.gitignore @@ -0,0 +1,5 @@ +mail_parser_wasm_bg.wasm +mail_parser_wasm_bg.wasm.d.ts +mail_parser_wasm.js +mail_parser_wasm.d.ts +README.md diff --git a/mail-parser-wasm/worker/package.json b/mail-parser-wasm/worker/package.json index 433f77a..97a5741 100644 --- a/mail-parser-wasm/worker/package.json +++ b/mail-parser-wasm/worker/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/dreamhunter2333/cloudflare_temp_email", "directory": "mail-parser-wasm" }, - "version": "0.2.1", + "version": "0.2.2", "license": "MIT", "files": [ "mail_parser_wasm_bg.wasm",