Enterprise Edition
Beryl.Outlook SDK
Advanced Outlook PST and OST Recovery SDK. No Outlook. No MAPI. No Office.
Beryl.Outlook is a recovery engine you build into your own software. Give it a PST or OST file that Outlook cannot open, and it returns the mail, contacts, calendars, tasks and attachments that are still on the disk, packed into a fresh PST that Outlook opens without any complaint.
Data TB Software built it for the teams who cannot ask a customer to install Outlook on a server: backup vendors, forensic labs, eDiscovery platforms, managed service providers and IT departments that handle damaged mailboxes every week.
Choose your language below. Each package is built around the same recovery engine, so the same damaged file gets the same careful treatment whichever language your product is written in.
dotnet add package Beryl.Outlook
Choose Your Language
| Language | A good fit for | Get the SDK |
|---|---|---|
| .NET | Windows services, ASP.NET back ends, worker services, desktop and forensic tools | Get it on NuGet |
| Java | Enterprise back ends, archive and compliance platforms | Available on request |
| C++ | Native forensic tools and desktop software | Available on request |
| Python | Automation scripts, data pipelines, notebooks | Available on request |
| Go | Small cloud services, workers and command line tools | Available on request |
| Rust | Memory-safe tooling and high-throughput pipelines | Available on request |
The Problems It Solves
| What went wrong | What you usually see | What Beryl.Outlook does |
|---|---|---|
| The file header was wiped by a crash, a failing disk or ransomware | The file will not open at all | Rebuilds the internal index from the raw data blocks |
| Outlook throws error 0x80040119 or 0x80040600 | The repair tool trims records and gives up on the rest | Reads the lower database layers directly and pulls out what is intact |
| A user emptied Deleted Items or pressed Shift+Delete | The mail looks gone for good | Scans unused blocks and brings back items that were not yet overwritten |
| An OST belongs to an account that no longer exists | Outlook cannot open it without the server | Reads the offline file and writes the data to a normal PST |
| A mailbox has grown past 30 GB | Memory spikes, crashes, or Outlook size limits | Streams the file in blocks and can split the output into smaller PSTs |
| Your product needs to create PST files | Automating Outlook on a server, which is fragile | Writes the PST file itself, with no Outlook involved |
How It Works
- Open and scan. Point the engine at a PST or OST file. Use FastScan for healthy files and ExtensiveScan for damaged ones.
- Review the result. Browse the recovered folders and items. Anything rescued from unused space is flagged as deleted so your code can treat it separately.
- Export. Write a clean Unicode PST, or split it into parts. Large attachments can be moved out to a folder to keep the PST lean.
- Ship it. The output opens in Outlook 2003 all the way to Microsoft 365.
The flow is the same in every language: open, scan, review, export.
What You Get
Repair damaged files
- Rebuilds the folder tree when the first 512 bytes of the file, including the header and root pointers, are zeroed or overwritten
- Reads unencrypted, compressible-encryption and high-encryption data blocks without any setup
- Fixes broken table and heap structures so folders and message lists load again
- Handles both ANSI (Outlook 97 to 2002) and Unicode PST files
Recover deleted mail
- Finds permanently deleted emails, contacts, calendar items and attachments in unused database blocks
- Gathers orphaned items into a dedicated recovered folder and marks each one as deleted
- Pulls embedded files, PDFs, images and documents out of damaged messages
Write clean PST files
- Produces Unicode PST files that follow the Microsoft MS-PST specification
- Rebuilds the original folders, including Inbox, Sent Items, Contacts, Calendar, Tasks, Notes, Journal and custom subfolders
- Keeps message headers, Internet Message IDs, HTML and RTF bodies, flags, delivery times, read status and custom MAPI properties
Handle very large mailboxes
- Streams data in blocks, so memory use stays steady on 30 GB to 50 GB files and above
- Splits the output into 5 GB, 10 GB, 20 GB or 50 GB parts
- Detaches heavy media attachments into an external folder when you want a small, fast PST
Find files you did not know about
- On Windows, reads Outlook profiles from the registry and lists the data files behind them
- Crawls local drives, network shares and external storage for forgotten .pst, .ost and .bak files
Choosing a Scan Mode
| Feature | FastScan | ExtensiveScan |
|---|---|---|
| File condition | Healthy, or with small index problems | Badly corrupt, unopenable, or under investigation |
| Approach | Follows the file's own valid indexes | Reads the file block by block with a sliding window |
| Speed | Runs at close to disk speed | Slower, because it checks everything |
| Deleted item recovery | Only items the file still lists | Includes items carved from unused space |
| Typical use | Migration pipelines and bulk conversion | Crash recovery, ransomware cases, evidence work |
What Can Be Extracted
| Item | Details you get back |
|---|---|
| Emails | Subject, sender, recipients, dates, importance, plain text, HTML and RTF bodies, transport headers, MAPI properties |
| Attachments | File name, MIME type, content stream, inline images, and files inside deleted items |
| Contacts | Names, job title, company, email addresses, phone numbers, postal addresses |
| Calendar items | Subject, location, start and end, all-day flag, organizer, attendees |
| Tasks | Subject, dates, percent complete, status, priority |
| Notes and journal | Note text, size and colour, timeline entries |
Reads: PST (ANSI and Unicode), OST from Exchange 2003 to Microsoft 365 and IMAP, plus .bak files and raw damaged copies.
Writes: Unicode PST, single or split, with attachments checked by CRC and stored with the right content type.
Runs Where Your Software Runs
Windows, Windows Server 2016 to 2025, Ubuntu, Debian, RHEL, CentOS, Alpine, macOS on Apple Silicon and Intel
Docker, Kubernetes, AWS Lambda and ECS, Azure Container Apps
.NET Framework 4.6.2 to 4.8.1, .NET Core 2.0 to 3.1, .NET 6 to 10 and above, plus .NET Standard 2.0
Java, C++, Python, Go and Rust through the native interface
Quick Start for .NET
Install the package.
Scan a damaged file and write a clean PST.
using Beryl.Outlook;
using Beryl.Outlook.Models;
using Beryl.Outlook.Services;
var engine = new BerylOutlookEngine();
// FastScan for healthy files, ExtensiveScan for damaged ones
var scan = await engine.ScanAsync(@"D:\cases\laptop42\archive.pst", ScanMode.ExtensiveScan);
Console.WriteLine($"{scan.TotalItemsCount} items, {scan.TotalDeletedItemsCount} recovered from deleted space");
await engine.ExportAsync(scan, new ExportOptions
{
Format = ExportFormat.PST,
OutputDirectory = @"D:\cases\laptop42\recovered",
RecoverDeletedItems = true,
PstOption = PstSaveOption.SaveNormally
});List only the deleted items that were carved out.
foreach (var folder in scan.Folders)
{
foreach (var mail in folder.Messages.Where(m => m.IsDeleted))
{
Console.WriteLine($"{mail.DeliveryTime:u} {mail.SenderEmailAddress} {mail.Subject}");
}
}Split the output for a huge mailbox.
await engine.ExportAsync(scan, new ExportOptions
{
Format = ExportFormat.PST,
OutputDirectory = @"D:\cases\laptop42\parts",
PstOption = PstSaveOption.SplitPst,
SplitSize = PstSplitSize.Split10GB
});Run many mailboxes at once. Wrap each file in its own try and catch, and one bad mailbox never stops the others.
var gate = new SemaphoreSlim(4);
var jobs = Directory.GetFiles(inputFolder, "*.ost").Select(async file =>
{
await gate.WaitAsync();
try
{
var engine = new BerylOutlookEngine();
var scan = await engine.ScanAsync(file, ScanMode.FastScan);
await engine.ExportAsync(scan, new ExportOptions
{
Format = ExportFormat.PST,
OutputDirectory = Path.Combine(outputFolder, Path.GetFileNameWithoutExtension(file)),
PstOption = PstSaveOption.SaveNormally
});
}
catch (Exception ex)
{
Console.WriteLine($"{file}: {ex.Message}");
}
finally
{
gate.Release();
}
});
await Task.WhenAll(jobs);Activate your license file when you move to production.
new License().SetLicense(@"C:\licenses\Beryl.Outlook.lic"); Console.WriteLine(BerylLicense.IsLicensed);
Built for Production
Designed to run in parallel pipelines, so hundreds of mailboxes can be processed side by side
A corrupt block in one mailbox is contained and the rest of the queue keeps going
No registry entries are written, no reboot is needed, and nothing is left behind when you work in memory
Drops into slim Linux images and short-lived cloud workers
Block streaming keeps the footprint predictable, however big the file
Why Not Use Outlook Automation or a General Email Library?
Outlook automation needs a licensed desktop install, a user profile and the Windows COM layer. It is hard to run on a server and impossible on Linux. Beryl.Outlook skips all of it.
The built-in repair tool fixes what it can see and tends to cut away records when the damage runs deeper. It is also a desktop tool, so you cannot call it from your own product.
General email libraries are made to read healthy files. Some skip a bad item and carry on, which helps, but rebuilding a destroyed header or finding mail that no folder lists anymore is a different job. That job is the whole purpose of this SDK.
Where Teams Use It
- Digital forensics and law enforcement: deleted emails and attachments from seized computers and failing drives
- eDiscovery and compliance: searching large collections of orphaned PST and OST files for legal review
- Cloud migration: turning unreachable Exchange OST files into PSTs ready for Microsoft 365 or Google Workspace
- Disaster recovery and MSP work: bringing client mailboxes back after crashes, bad disks or ransomware
- Software vendors: adding PST recovery and PST creation inside backup, archive and forensic products
Licensing
Evaluation. Inspect every mailbox you like. Export is limited to 10 items per folder, so you can test your own workflow before you buy.
Enterprise Forensic Edition. Unlimited mailboxes, unlimited item export, multi-threaded batch operations and commercial deployment rights for products you distribute. Includes lifetime perpetual license validity with 1 year of free updates and technical support from the purchase date.
License files are signed with 4096-bit RSA and SHA-512.
Frequently Asked Questions
QWhich languages does Beryl.Outlook support?
A.NET, Java, C++, Python, Go and Rust. The .NET package is on NuGet, and the other packages are listed in the language table at the top of this page.
QDo I need Microsoft Outlook, Office or MAPI installed?
ANo. The SDK reads and writes the PST format directly, so nothing from Microsoft Office has to be on the machine.
QCan it open a PST or OST with a destroyed header?
AYes. It searches the file for its own block markers and rebuilds the folder structure from them, even when the header and root pointers are zeroed.
QCan it get back emails that were permanently deleted?
AIt can recover items whose data has not been overwritten yet. Use ExtensiveScan on an untouched copy of the file for the best chance.
QDoes it read OST files?
AYes. It reads OST files from Exchange 2003 through Microsoft 365, including IMAP OST files, and can write the contents to a standard PST.
QWill it run on Linux, macOS or in Docker?
AYes. It runs on Windows, Linux, macOS, Docker and Kubernetes. Finding Outlook profiles through the registry only works on Windows.
QHow large a mailbox can it handle?
AFiles of 50 GB and more. The engine streams data in blocks, and you can split the output into 5 GB, 10 GB, 20 GB or 50 GB PST files.
QWhich Outlook versions open the PST files it creates?
AOutlook 2003, 2007, 2010, 2013, 2016, 2019, 2021, 2024 and Microsoft 365.
QHow is this different from the repair tool that comes with Outlook?
AThat tool is a desktop utility that repairs only what it can reach. Beryl.Outlook is a library you call from your own code, and it works at the lowest database layers to recover items the built-in tool drops.
QWhat are the limits of the evaluation version?
AYou can scan and inspect everything, but export stops at 10 items per folder. A commercial license removes the limit.
QCan I include it in a product I sell?
AYes. The Enterprise Forensic Edition includes commercial deployment rights. Ask for a quote.
Ready to build?
Try the full SDK free on NuGet — buy a commercial license when you are ready for production.
