feat(email): expand Outlook MSG body and attachment previews - #303
Merged
Merged
Conversation
Decode Unicode/ANSI and binary HTML bodies, preserve recipient groups and local inline images, add bounded compressed-RTF handling, and reuse the existing nested-renderer contract for rich text and embedded messages. Isolate untrusted email HTML and clean up cancelled body/attachment views. Add deterministic CFB fixtures, parser tests, a Chromium UI gate and docs. Validation: 48 offline unit checks and 34 Chromium API-fixture checks pass. Five installed-MsgReader tests and full workspace verification remain pending.
Preserve the newly merged Vue error callback and image rotation changes. Email files are unchanged from the locally verified blob hashes.
Co-authored-by: Cursor <cursoragent@cursor.com>
wybaby168
marked this pull request as ready for review
September 18, 2026 09:59
wybaby168
added a commit
that referenced
this pull request
Sep 19, 2026
* feat(email): expand Outlook MSG body and attachment previews Decode Unicode/ANSI and binary HTML bodies, preserve recipient groups and local inline images, add bounded compressed-RTF handling, and reuse the existing nested-renderer contract for rich text and embedded messages. Isolate untrusted email HTML and clean up cancelled body/attachment views. Add deterministic CFB fixtures, parser tests, a Chromium UI gate and docs. Validation: 48 offline unit checks and 34 Chromium API-fixture checks pass. Five installed-MsgReader tests and full workspace verification remain pending. * fix(email): drop unsupported sourceUrl from nested render context
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
renderNestedBuffer; retain readable text and explicit capability notices when rich rendering is unavailable.sourceUrlfield from the nestedrenderNestedBuffercontext inemail.ts(it is not part ofFileRenderContext).Related issue
N/A: maintainer-requested completion of existing Outlook MSG preview support; no separate tracking issue was supplied.
Change classification
Package verification scripts change; runtime dependencies and public API do not.
Verification
pnpm --filter @file-viewer/renderer-email buildpnpm --filter @file-viewer/renderer-email type-checknode --test packages/renderers/email/test/msg.test.mjspnpm --filter @file-viewer/renderer-email verify:msg:browserSample / fixture evidence
packages/renderers/email/test/fixtures/msg-fixture.mjsgenerates real CFB v3/v4 messages with FAT/DIFAT/MiniFAT, Unicode/ANSI properties, recipient rows, raster CID attachments, compressed RTF and embedded message storage.packages/renderers/email/test/msg.test.mjsincludes default-on installed-MsgReader parsing and embedded-MSG extraction/reparse cases.packages/renderers/email/test/fixtures/README.md. These are original Apache-2.0 fixtures usingexample.test, not customer emails or renamed text files.Visual evidence
After: real Chromium UI capture, 1180 × 760 viewport, reduced to 900 × 580 for this image. It uses the explicit Reader API fixture, not an Outlook reference image or real-parser end-to-end capture. The browser gate also produces mobile and dark screenshots plus a JSON report.
Before: the reviewed MSG adapter ignored
bodyHtml, treated binaryhtmlas a string, grouped all recipients into To, and did not register MSG CID resources or render its RTF body. No matched before screenshot was captured.Risk and compatibility
@file-viewer/renderer-email; MSG parsing and shared EML/MBOX HTML presentation. MBOX remains first-message preview, not a mailbox browser.Checklist