Convert Emails through web-servers
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016 / 2019/2022 Server
and
Docker / Citrix / Wine
Total Mail ConverterX is an easy-to-use tool to convert emails (.msg, .eml) to PDF, TXT, HTM, RTF, DOC files on Windows web-servers. This is the easiest way to archive your business emails you may need to open in future. Total Mail ConverterX supports a wide range of target formats (DOC, RTF, PDF, XPS, HTML, XHTML, TXT, TIFF, JPEG, EML, MSG, PST). Total Mail ConverterX runs silently on your server - no user interface, no additional popups, no babysitting.
Total Mail ConverterX is as powerful as the regular Total Mail Converter with GUI. You can convert as many emails as you want in one go (yes, hundreds of thousands of them) and enhance output files with new names, page counters, bates stamping, security settings, etc.
Attachments can be extracted and placed to the same or a new folder. The app can give your attached files new names so that you always know which attachment belongs to which email. The Pro version can convert attached files together with email bodies.
Total Mail ConverterX is extremely easy-to-use and doesn't require any special knowledge. You can easily implement it into your app or system using ActiveX. The price is very affordable too (one-time fee for a lifetime license, no subscriptions). Get your copy now!
Find some samples in C# specifically for ASP.net. If you need examples on other languages please contact us. We will create any example specially for you.
P.S. Take a look at Total Folder Monitor. It will watch any folder and run Total Mail Converter in case a new file arrives. Find more details here.
(includes 30 day FREE trial)
(only $950.00)
string src="C:\\test\\Source.Mail";
string dest="C:\\test\\Dest.PDF";
MailConverterX Cnv = new MailConverterX();
Cnv.Convert(src, dest, "-c PDF -log c:\\test\\Mail.log");
MessageBox.Show("Convert complete!");
Download .NET Mail Covnerter example
docker run -p 5000:5000 tdhster/mailconverter-api
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\MailConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var msgPath = $@"{assemblyDirectoryPath}\MSG\MSG-1.msg";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(msgPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & MSG files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{msgPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("MailConverter.MailConverterX")
C.Convert "c:\test\source.eml", "c:\test\dest.pdf", "-cPDF -log c:\mail.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("MailConverter.MailConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Rresponse.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite c.ConvertToStream("C:\www\ASP\Source.eml", "C:\www\ASP", "-cpdf -log c:\html.log")
set C = nothing
Example PHP:
$src="C:\\test\\test.msg";
$dest="C:\\test\\test.pdf";
if (file_exists($dest)) unlink($dest);
$c= new COM("MailConverter.MailConverterX");
$c->convert($src,$dest, "-c pdf -log c:\\Mail.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('MailConverter.MailConverterX')
src="C:\\test\\test.pdf";
dest="C:\\test\\test.tiff";
c.convert(src,dest, "-c TIFF -log c:\\test\\Mail.log");
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("MailConverter.MailConverterX")
src="C:\\test\\test.eml";
dest="C:\\test\\test.tiff";
c.convert(src, dest, "-c TIFF -log c:\\test\\Mail.log");
if not os.path.exists(file_path):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c:=CreateOleObject('MailConverter.MailConverterX');
C.Convert('c:\test\source.eml', 'c:\test\dest.tiff', '-c TIFF -log c:\test\Mail.log');
IF c.ErrorMessage<>'' Then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("MailConverter.MailConverterX");
c.Convert("C:\\test\\source.msg", "C:\\test\\dest.pdf", "-c PDF");
if (c.ErrorMessage!="")
alert(c.ErrorMessage)
use Win32::OLE; my $src="C:\\test\\test.eml"; my $dest="C:\\test\\test.tiff"; my $c = CreateObject Win32::OLE 'MailConverter.MailConverterX'; $c->convert($src,$dest, "-c TIFF -log c:\\test\\Mail.log"); print $c->ErrorMessage if -e $dest;
"I work for Freeland Cooper & Foreman LLP and I am currently handling the project for which we purchased Total Mail Converter. We purchased the program for the purpose of merging large numbers of .msg files into .pst form, and so far I am very pleased with the results; it is reliable, highly functional, and easy to use."
Max Canin
www.freelandlaw.com
"We use SharePoint as a document library and access it through UNC. I use TotalMailConverterX to archive e-mail messages. I use the subject line as part of the resultant filename, but that presents a problem. SharePoint does not allow certain characters in filenames. I was wondering if there could be a command line option added to remove the unsafe characters for use in SharePoint UNC paths."
Shane Adam
Systems Analyst & Developer, http://eigltd.com
Update Aug 2015: Done!
Total Mail ConverterX ships with MailConverterX.exe, a console binary you can drive from scripts, scheduled tasks, mail-archive workers, or any backend service. The flag set matches the GUI MailConverter.exe; for the full reference see the command-line documentation. The recipes below cover the cases we hear about most often from SDK customers working with MSG, EML, and MBOX mailboxes.
The smallest possible call — one Outlook message in, one PDF out.
MailConverterX.exe "C:\mailbox\invoice.msg" "C:\out\invoice.pdf" -cPDF
Process a whole folder of EML files exported from Thunderbird, Apple Mail, or any IMAP client and drop the PDFs into a sibling output directory.
MailConverterX.exe "C:\mailbox\*.eml" "C:\out\" -cPDF
Swap the mask for *.msg or *.mbox to pick a different source format, or -cDOC / -cTXT / -cTIFF to pick a different target.
An Outlook export rarely lives in one flat folder — you usually get Inbox, Sent, Archive, and dozens of subfolders. -Recurse walks subdirectories; -kfs recreates the same tree on the output side instead of flattening everything into one bucket.
MailConverterX.exe "C:\export\Mailbox\*.msg" "C:\out\Mailbox\" -cPDF -Recurse -kfs
For e-discovery and case files you usually want one PDF per matter, not one per email. -combine merges the matched messages into a single PDF in source-file order; -sort date arranges them chronologically.
MailConverterX.exe "C:\cases\Acme\*.eml" "C:\out\Acme-thread.pdf" -cPDF -combine -sort date
The Standard edition converts the email body and writes original attachments to disk next to the output document. -attach turns attachment extraction on; -atemplate controls the attachment file-name pattern.
MailConverterX.exe "C:\mailbox\*.msg" "C:\out\" -cPDF -attach -atemplate "[mail]_[attach_index]_[attach]"
Add -uattach to unpack ZIP attachments automatically, or -images to embed inline images directly in the PDF body.
By default every header field is exported. To produce a clean print-ready PDF that shows only From, Date, and Subject — no CC, no BCC, no transport headers — switch the unwanted fields off explicitly.
MailConverterX.exe "C:\mailbox\*.eml" "C:\out\" -cPDF -sender -date -subject -cc:off -bcc:off -rcpt:off
Add -rfcheaders if you instead need the full RFC-822 transport headers preserved for forensic review.
Bates-style stamping for litigation hand-offs: a footer with a running page number on every page, plus a header with the production date. [page] and [date] are the built-in placeholders.
MailConverterX.exe "C:\cases\Acme\*.msg" "C:\out\Acme.pdf" -cPDF -combine -sort date -HeadText "ACME-PROD [date]" -HeadAlign right -FootText "Page [page]" -FootAlign center
Standard for sending privileged correspondence to opposing counsel: an owner password locks edit/print permissions, a user password gates opening the file, and -perm grants exactly the rights you allow.
MailConverterX.exe "C:\mailbox\*.msg" "C:\out\" -cPDF -mp "owner-pwd" -up "user-pwd" -perm Copy
Once MailConverterX.exe runs as a service or scheduled job, the only way to know what happened is the log. -verbosity detail writes one line per file; -logmode append keeps history across runs; -fo overwrites earlier output silently instead of stopping on collisions.
MailConverterX.exe "C:\mailbox\*.eml" "C:\out\" -cPDF -log "C:\logs\mailconv.log" -verbosity detail -logmode append -fo
When a mail-archive worker writes a queue file and the converter consumes it, you don't want to encode the file paths into the command line itself. -list reads file masks (one per line) from a text file.
MailConverterX.exe -list "C:\queues\mail-batch.txt" "C:\out\" -cPDF -log "C:\logs\mailconv.log"
Updated Tue, 05 May 2026
(only $950.00)
Download free trial and convert your files in minutes.
No credit card or email required.
Contact us. We will gladly enhance our mail converter so that it fit your needs perfectly. Customization is often free to our customers.
Docker docker run -p 5000:5000 tdhster/mailconverter-api