From 3bfa73f3752c41732ddbabb401199d14cf6d5848 Mon Sep 17 00:00:00 2001 From: Aaron Guise Date: Mon, 27 Jul 2026 17:42:33 +1200 Subject: [PATCH] fix: leave subject blank (not "Fwd:") for a subject-less message buildForwardAsAttachmentPayload called buildForwardSubject(email.subject, forwardPrefix) unconditionally, and buildForwardSubject("", prefix) returns just the bare prefix rather than "". Normal Forward doesn't do this - EmailComposer's getInitialSubject() returns "" outright when !replyTo?.subject, only calling buildForwardSubject when there's an actual subject to prefix. So forwarding a subject-less message as an attachment produced "Fwd:" as the subject, while normal Forward left it blank. Only call buildForwardSubject when email.subject is truthy, matching getInitialSubject()'s behavior exactly. Add a test. Caught by GitHub Copilot's automated PR review. --- lib/__tests__/forward-as-attachment.test.ts | 6 ++++++ lib/forward-as-attachment.ts | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/__tests__/forward-as-attachment.test.ts b/lib/__tests__/forward-as-attachment.test.ts index c52aeb13..4dc92cf4 100644 --- a/lib/__tests__/forward-as-attachment.test.ts +++ b/lib/__tests__/forward-as-attachment.test.ts @@ -46,6 +46,12 @@ describe('buildForwardAsAttachmentPayload', () => { expect(payload?.subject).toBe('Fwd: already forwarded once'); }); + it('leaves the subject blank (not just the bare prefix) for a subject-less message, matching normal Forward', () => { + const email = makeEmail({ subject: undefined }); + const payload = buildForwardAsAttachmentPayload(email, 'Fwd:'); + expect(payload?.subject).toBe(''); + }); + it('honors a custom filename template, matching "Export as .eml" naming instead of always using the default', () => { const email = makeEmail({ subject: 'Missed spam example' }); const payload = buildForwardAsAttachmentPayload(email, 'Fwd:', { diff --git a/lib/forward-as-attachment.ts b/lib/forward-as-attachment.ts index 3058c2ec..42c4bde8 100644 --- a/lib/forward-as-attachment.ts +++ b/lib/forward-as-attachment.ts @@ -41,7 +41,11 @@ export function buildForwardAsAttachmentPayload( if (!email.blobId) return null; return { - subject: buildForwardSubject(email.subject, forwardPrefix), + // Match the normal Forward flow's getInitialSubject(), which leaves the + // subject blank rather than prefix-only when the original has none - + // buildForwardSubject("", prefix) would otherwise return just the bare + // prefix (e.g. "Fwd:") for a subject-less message. + subject: email.subject ? buildForwardSubject(email.subject, forwardPrefix) : "", attachment: { blobId: email.blobId, name: emailExportFilename(email, filenameOptions),