diff --git a/.changeset/gmail-header-case-insensitive.md b/.changeset/gmail-header-case-insensitive.md new file mode 100644 index 00000000..017b6539 --- /dev/null +++ b/.changeset/gmail-header-case-insensitive.md @@ -0,0 +1,5 @@ +--- +"@googleworkspace/cli": patch +--- + +Parse Gmail message headers case-insensitively when formatting message output. diff --git a/crates/google-workspace-cli/src/helpers/gmail/mod.rs b/crates/google-workspace-cli/src/helpers/gmail/mod.rs index caeb8b6b..0fc0f201 100644 --- a/crates/google-workspace-cli/src/helpers/gmail/mod.rs +++ b/crates/google-workspace-cli/src/helpers/gmail/mod.rs @@ -258,15 +258,15 @@ fn parse_message_headers(headers: &[Value]) -> ParsedMessageHeaders { let name = header.get("name").and_then(|v| v.as_str()).unwrap_or(""); let value = header.get("value").and_then(|v| v.as_str()).unwrap_or(""); - match name { - "From" => parsed.from = value.to_string(), - "Reply-To" => append_address_list_header_value(&mut parsed.reply_to, value), - "To" => append_address_list_header_value(&mut parsed.to, value), - "Cc" => append_address_list_header_value(&mut parsed.cc, value), - "Subject" => parsed.subject = value.to_string(), - "Date" => parsed.date = value.to_string(), - "Message-ID" | "Message-Id" => parsed.message_id = value.to_string(), - "References" => append_header_value(&mut parsed.references, value), + match name.to_ascii_lowercase().as_str() { + "from" => parsed.from = value.to_string(), + "reply-to" => append_address_list_header_value(&mut parsed.reply_to, value), + "to" => append_address_list_header_value(&mut parsed.to, value), + "cc" => append_address_list_header_value(&mut parsed.cc, value), + "subject" => parsed.subject = value.to_string(), + "date" => parsed.date = value.to_string(), + "message-id" => parsed.message_id = value.to_string(), + "references" => append_header_value(&mut parsed.references, value), _ => {} } } @@ -2427,6 +2427,43 @@ mod tests { assert_eq!(original.body_html.as_deref(), Some("
HTML only
")); } + #[test] + fn test_parse_original_message_headers_are_case_insensitive() { + let msg = json!({ + "threadId": "thread-123", + "payload": { + "mimeType": "text/plain", + "headers": [ + { "name": "from", "value": "alice@example.com" }, + { "name": "REPLY-TO", "value": "team@example.com" }, + { "name": "TO", "value": "bob@example.com" }, + { "name": "cC", "value": "carol@example.com" }, + { "name": "SUBJECT", "value": "Hello" }, + { "name": "date", "value": "Fri, 6 Mar 2026 12:00:00 +0000" }, + { "name": "message-id", "value": "