Maximizer CRM has been around for decades and is still widely used in legacy and mid-sized enterprises. While it continues to serve as a central hub for customer data, communications, and document storage, it poses unique challenges for those looking to modernize or migrate their environments.
One of the most frustrating problems comes when extracting emails from Maximizer’s SQL backend. Unlike modern CRMs that use standardized formats, Maximizer stores emails in multiple ways including a proprietary format that resists easy conversion.
In this post I’ll walk through how I solved the problem of extracting hex encoded Email Message blobs from Maximizer’s database and converting them into standard .eml files with metadata and attachments intact.
How Maximizer Stores Emails
When exploring Maximizer’s backend I found emails in three formats:
- .eml – Standard MIME format
- .msg – Microsoft Outlook format
- Email Message – A Maximizer specific format that didn’t behave like either of the above
Each was stored as a BLOB, often hex encoded in SQL. While .eml and .msg could be opened with some effort the Email Message files were undocumented, unreadable, and rejected by Outlook or other email clients.
The Breakthrough
After weeks of trial and error saving blobs as .msg files using Outlook interop and testing libraries like MSGReader or Independentsoft I noticed something important in the raw hex:
|xD0|xCF|x11|xE0
That’s the OLE Compound Binary File signature—the same structure used by old Microsoft Office documents and Outlook .msg files.
But here’s the twist: despite the familiar signature Maximizer’s format wasn’t Outlook compatible. Attempting to deserialize still failed, leaving scrambled metadata or partial recoveries.
Treating It as a Generic OLE Container
The solution came by treating the file as a generic OLE compound container. Using the OpenMCDF library in C# I was able to explore the container directly.
Inside I found streams holding:
- The full MIME message body
- Attachments
- Header metadata such as From, To, and Subject
With this data extracted I reconstructed the email into a standard .eml file using MimeKit.
Sample C# Code
using OpenMcdf;
using MimeKit;
public MimeMessage ParseMaximizerEmail(byte[] oleBytes)
{
var compoundFile = new CompoundFile(new MemoryStream(oleBytes));
var root = compoundFile.RootStorage;
string mimeContent = Encoding.UTF8.GetString(root.GetStream("MIME").GetData());
var message = MimeMessage.Load(new StringReader(mimeContent));
return message;
}
Stream names like “MIME” or “Body” vary depending on the sample, so some trial and error is required.
Results
With this method I was able to:
- Extract sender, recipients, subject, body, and attachments
- Reconstruct readable .eml files for Outlook, Thunderbird, or any modern email client
- Batch process and migrate thousands of Maximizer emails into Azure Blob Storage and Exchange Online
Challenges and Edge Cases
- Encoding Issues – Streams weren’t always UTF-8, sometimes UTF-16 appeared requiring detection logic
- Embedded Content – Images and nested attachments needed additional parsing
- Incomplete Documentation – Some OLE streams remain unexplained, requiring experimentation
Why This Matters
Maximizer’s proprietary Email Message format is a classic example of how undocumented storage can block migrations. Businesses stuck on legacy systems often feel trapped.
By using tools like OpenMCDF and MimeKit it’s possible to reverse engineer legacy structures and preserve critical communications in standard formats.
Final Thoughts
If you’re planning a Maximizer migration or dealing with OLE-based email blobs in SQL, this approach can save you weeks of frustration. You can adapt the sample code for your own environment or reach out if you’d like help modernizing your email archives.