From: Harald Nordgren via GitGitGadget Date: Wed, 21 Oct 2026 07:07:47 GMT Subject: [PATCH v2 0/2] Fix imap-send with reordered message headers Message-ID: In-Reply-To: git imap-send rejected patches sent with git send-email, such as ones fetched from lore with b4, because it expected Date before Subject. Changes in v2: * Case insensitive header match according to RFC 822/2822/5322. Harald Nordgren (2): imap-send: avoid leaking the tunnel command imap-send: accept messages with Subject before Date imap-send.c | 38 ++++++++++++++++++-------------------- t/t9001-send-email.sh | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 20 deletions(-) base-commit: 47fdf2208c5b94c8cc01c106b8f7c85efb91c926 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2456%2FHaraldNordgren%2Ffix%2Fimap-send-header-order-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2456/HaraldNordgren/fix/imap-send-header-order-v2 Pull-Request: https://github.com/git/git/pull/2456 Range-diff vs v1: 1: 0784c16134 = 1: b170b1f6d3 imap-send: avoid leaking the tunnel command 2: 94129fb718 ! 2: c42827a122 imap-send: accept messages with Subject before Date @@ Commit message and git send-email writes Subject before Date. Accept the three headers in any order within the header block of each - message. The copy that git send-email --imap-sent-folder pipes to + message, and match their names case insensitively as RFC 5322 + specifies. The copy that git send-email --imap-sent-folder pipes to imap-send then passes the same check, so the special case added for it in 04133f5bc4 (send-email: add ability to send a copy of sent emails to an IMAP folder, 2025-08-12) is no longer needed. @@ imap-send.c: static void wrap_in_html(struct strbuf *msg) + bool from = false, date = false, subject = false; + + while ((line = strchr(line, '\n')) && *++line != '\n') { -+ if (starts_with(line, "From: ")) ++ if (istarts_with(line, "From: ")) + from = true; -+ else if (starts_with(line, "Date: ")) ++ else if (istarts_with(line, "Date: ")) + date = true; -+ else if (starts_with(line, "Subject: ")) ++ else if (istarts_with(line, "Subject: ")) + subject = true; + } + return from && date && subject; -- gitgitgadget