Skip to main content

Email and Outlook data

OfficeIMO.Email

Read and write email, Outlook items, mailbox stores, calendars, contacts, and address books without Outlook or third-party message parsers.

MIT licensed No Office required Cross-platform .NET
Install dotnet add package OfficeIMO.Email
Generated output ยท OfficeIMO.Email
GENERATED OUTPUT

Ready for your workflow

Build, inspect, and transform documents through a focused API.

C#
using var document = CreateDocument();
document.Save();

One managed API for email files and mailbox data

OfficeIMO.Email reads, writes, converts, searches, and verifies persisted email and Outlook data through managed .NET APIs. It does not require Outlook, COM, MailKit, MimeKit, MsgKit, or a native storage library.

using OfficeIMO.Email;

EmailDocument message = EmailDocument.Load("message.msg");
Console.WriteLine(message.Subject);
message.Save("message.eml");

Formats and workflows

Artifact familyReadWrite or exportUseful for
EML and MIMEYesYesStandards-based messages, attachments, inline resources, and embedded messages
Outlook MSG and OFTYesYesMessages, templates, appointments, contacts, tasks, journals, notes, and MAPI properties
TNEF and winmail.datYesYesOutlook transport payloads and typed item projections
mboxo and mboxrdYesYesPortable mailbox archives and streaming message enumeration
PST and OSTYesNew PST exportFolder-aware extraction, store conversion, and migration verification
Outlook for Mac OLMYesNew PST exportArchive discovery and cross-platform migration workflows
EMLX, Apple Mail, Maildir, and mailbox directoriesYesMessage or PST exportFile-based archive ingestion and normalization
ICS, vCalendar, and vCardYesYesCalendars, recurrence, reminders, contacts, and standards-based interchange
Outlook Offline Address BookYesSearch and validation resultsOffline identity discovery and resolution

Convert a mailbox store to a new PST

using OfficeIMO.Email.Store;

using EmailStoreSession source = EmailStoreSession.Open("mailbox.ost");

EmailStorePstConversionReport report = source.ExportToPst(
    "mailbox-export.pst",
    new EmailStorePstConversionOptions(
        continueOnItemError: true,
        includeAssociatedItems: true,
        includeOrphanedItems: true));

Console.WriteLine($"Converted: {report.ConvertedItems}");
Console.WriteLine($"Skipped: {report.SkippedItems}");
Console.WriteLine($"Verified: {report.Verification?.IsSuccessful}");

The source is not modified. The conversion report records converted and skipped items and can compare source and destination semantics.

Safety and verification

  • immutable parsing limits for source, header, attachment, MIME, compound-file, MAPI, and TNEF boundaries
  • streaming and reopenable attachment sources for large messages and store-backed content
  • conversion analysis that blocks known semantic loss by default
  • versioned semantic fingerprints for migration verification and deduplication
  • comparison reports that expose paths and lengths without copying private message values
  • optional keyed, value-free PST verification manifests

Guides

GuideUse it for
Messages and conversionEML, MIME, MSG, OFT, TNEF, attachments, streaming, and loss analysis
Mailbox storesPST, OST, OLM, mbox, EMLX, Apple Mail, Maildir, extraction, and PST export
Calendars and contactsICS, vCard, appointments, recurrence, tasks, and Outlook personal information
Safety and verificationBounded input, diagnostics, protected messages, comparison, and migration proof
Email API referenceComplete types, methods, parameters, and return models

Next step

Turn the package into a working document.

Follow a focused guide, inspect the generated API reference, or try a browser-safe conversion.