Skip to main content

EmailViewer

A React component for rendering email (.eml) files. Parses email content using postal-mime and displays headers and body with security sandboxing.

Import

import {
BaseEmailViewer,
EmailViewer,
} from "@osdk/react-components/experimental/email-viewer";
  • EmailViewer — Primary component for OSDK usage. Accepts an OSDK Media object, parses the .eml contents, and renders the email.
  • BaseEmailViewer — Lower-level component that accepts a pre-parsed ParsedEmail object.

Usage

With OSDK Media

import { EmailViewer } from "@osdk/react-components/experimental/email-viewer";

<EmailViewer media={ticket.emailAttachment} />;

With parsed email data

import { BaseEmailViewer } from "@osdk/react-components/experimental/email-viewer";

<BaseEmailViewer
email={{
subject: "Hello",
from: { name: "Alice", address: "alice@example.com" },
to: [{ name: "Bob", address: "bob@example.com" }],
cc: [],
date: "2026-01-15T10:30:00Z",
html: "<p>Hello Bob!</p>",
text: "Hello Bob!",
}}
/>;

Props

BaseEmailViewerProps

PropTypeRequiredDescription
emailParsedEmailYesParsed email data
classNamestringNoCSS class applied to the root element

EmailViewerMediaProps

PropTypeRequiredDescription
mediaMediaYesThe OSDK Media object to fetch EML from
classNamestringNoCSS class applied to the root element

ParsedEmail

FieldTypeDescription
subjectstring | undefinedEmail subject line
fromEmailAddress | undefinedSender address
toreadonly EmailAddress[]Recipient addresses
ccreadonly EmailAddress[]CC addresses
datestring | undefinedDate string
htmlstring | undefinedHTML body
textstring | undefinedPlain text body

Security

HTML email bodies are rendered inside a sandboxed <iframe> with sandbox="allow-same-origin". This prevents script execution, form submissions, and popups from the email content.

Theming

:root {
--osdk-email-viewer-bg: var(--osdk-background-primary);
--osdk-email-viewer-border: var(--osdk-surface-border);
--osdk-email-viewer-header-bg: var(--osdk-background-secondary);
--osdk-email-viewer-header-border: var(--osdk-surface-border);
}