通过Web服务器转换电子邮件
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total Mail Converter X 是一款服务器端 SDK,可将 MSG、EML 和 MBOX 邮件转换为 PDF、DOC、RTF、HTML、XHTML、TXT、TIFF、JPEG、EML、MSG 和 PST — 无需在服务器上安装 Microsoft Outlook、MAPI 或任何 Office Interop。它以静默方式运行:没有图形界面、没有对话框、没有弹窗。Total Mail Converter X 同时提供命令行程序和 ActiveX/COM 接口,可直接嵌入 ASP、PHP、.NET、Python、Ruby、Java 以及任何支持 COM 的后端。
本标准版功能如下:
-atemplate 自定义命名规则;使用 -uattach 解压 ZIP 附件
-HeadText / -FootText),适用于法律电子取证
-mp、-up、-perm)
-rfcheaders)
-Recurse + -kfs,支持整棵邮箱目录树的处理
标准版 vs Pro X:标准版将附件以原始文件类型保存在邮件 PDF 旁边。Pro 版本通过 -docs 将附件(DOCX、XLSX、图像、PDF)渲染为目标格式,并将其与邮件正文合并到同一个输出文件中。如果只需对邮箱做普通归档,请选择标准版;如果需要将整个邮件线程作为一份独立 PDF 交付用于电子取证,请选择 Pro 版。
免费试用(30 天试用期,无任何限制),相信您会认可它的价值。
当前支持的部分文件格式转换:
|
|
|
string src = @"C:\test\Source.eml";
string dest = @"C:\test\Dest.pdf";
var cnv = new MailConverterX();
cnv.Convert(src, dest, "-cPDF -log c:\\test\\Mail.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
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 srcPath = $@"{assemblyDirectoryPath}\src\sample.msg";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"\"{srcPath}\" \"{outPath}\" -cPDF";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
sbLogs.AppendLine("Conversion complete.");
}
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"
Response.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite C.ConvertToStream("C:\www\ASP\Source.eml", "C:\www\ASP", "-cpdf -log c:\mail.log")
set C = nothing
$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, "-cPDF -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.eml"
dest = "C:\\test\\test.pdf"
c.convert(src, dest, "-cPDF -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.pdf"
c.convert(src, dest, "-cPDF -log c:\\test\\Mail.log")
if not os.path.exists(dest):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('MailConverter.MailConverterX');
c.Convert('c:\test\source.eml', 'c:\test\dest.pdf', '-cPDF -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", "-cPDF");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test.eml"; my $dest = "C:\\test\\test.pdf"; my $c = CreateObject Win32::OLE 'MailConverter.MailConverterX'; $c->convert($src, $dest, "-cPDF -log c:\\test\\Mail.log"); print $c->ErrorMessage if -e $dest;
"我在 Freeland Cooper & Foreman LLP 工作,目前正负责采购 Total Mail Converter X 的项目。我们购买这款程序是为了将大量的 .msg 文件合并成 .pst 格式,目前为止结果让我非常满意;它可靠、功能强大,使用也很方便。"
Max Canin
www.freelandlaw.com
"我们使用 SharePoint 作为文档库,并通过 UNC 访问。我用 Total Mail Converter X 归档电子邮件,并将主题作为生成文件名的一部分,但这带来了一个问题:SharePoint 不允许文件名中出现某些字符。我希望能新增一个命令行选项,用于在 SharePoint UNC 路径中去除不安全字符。"
Shane Adam
Systems Analyst & Developer, http://eigltd.com
"我们对离职员工的邮箱导出文件进行归档。客户向我们寄送 PST/MBOX 转储;我们的流水线会将每一份转换为一组独立的 PDF,并完整保留 RFC-822 邮件头以供取证审查。Total Mail Converter X 配合 -Recurse -kfs -rfcheaders -combine 就是核心引擎。已在生产环境中运行六年,我们的硬件吞吐量约为每小时 5,000 封邮件。整条流水线没有 Outlook 的踪影。"
Bartosz K.
Senior Backend Developer at a compliance-archive vendor
"工单会附带 EML 文件;客服团队需要 PDF 副本以记录工单流程。Total Mail Converter X 加 Total Folder Monitor:工单将 EML 投放到收件文件夹,转换器自动清理,客服工具再取走 PDF。借助 -HeadText/-FootText,Bates 式页码整洁清晰,无需任何人工干预。在 Windows Server Core 上以无界面方式运行,没有 Outlook,也不会出现意外的授权问题。"
Soledad O.
DevOps Engineer at a customer-support SaaS
"我们以免版税授权方式将 Total Mail Converter X 整合进自家的记录管理产品。一次性的项目费用只是 Aspose.Email 按开发者订阅价格的一小部分。我们的安装程序负责发布并注册 ActiveX,应用直接调用,最终用户只看到我们自己的界面。32 位 ActiveX 的限制让我们花了几天时间重构流水线,但当我们咨询解决方案时,技术支持响应迅速。"
Niko T.
Independent Software Vendor
Total Mail ConverterX 附带 MailConverterX.exe,这是一个可以从脚本、计划任务、邮件归档工作进程或任何后端服务驱动的控制台二进制程序。标志集与 GUI 版的 MailConverter.exe 一致;完整参考请参阅命令行文档。下面的配方涵盖了我们最常从处理 MSG、EML 和 MBOX 邮箱的 SDK 客户那里听到的场景。
最简单的调用方式 —— 一封 Outlook 邮件进入,一份 PDF 出来。
MailConverterX.exe "C:\mailbox\invoice.msg" "C:\out\invoice.pdf" -cPDF
处理从 Thunderbird、Apple Mail 或任何 IMAP 客户端导出的整个 EML 文件文件夹,并将 PDF 放入同级输出目录。
MailConverterX.exe "C:\mailbox\*.eml" "C:\out\" -cPDF
将掩码替换为 *.msg 或 *.mbox 以选择不同的源格式,或 -cDOC / -cTXT / -cTIFF 以选择不同的目标。
Outlook 导出很少存在于一个平面文件夹中 —— 您通常会得到收件箱、已发送、归档和数十个子文件夹。-Recurse 遍历子目录;-kfs 在输出端重新创建相同的树,而不是将所有内容展平到一个桶中。
MailConverterX.exe "C:\export\Mailbox\*.msg" "C:\out\Mailbox\" -cPDF -Recurse -kfs
对于电子证据开示和案件文件,您通常希望每件事一个 PDF,而不是每封电子邮件一个。-combine 按源文件顺序将匹配的邮件合并到单个 PDF 中;-sort date 按时间顺序排列它们。
MailConverterX.exe "C:\cases\Acme\*.eml" "C:\out\Acme-thread.pdf" -cPDF -combine -sort date
标准版转换电子邮件正文并将原始附件写入输出文档旁边的磁盘。-attach 打开附件提取;-atemplate 控制附件文件名模式。
MailConverterX.exe "C:\mailbox\*.msg" "C:\out\" -cPDF -attach -atemplate "[mail]_[attach_index]_[attach]"
添加 -uattach 自动解压 ZIP 附件,或 -images 将内联图像直接嵌入 PDF 正文。
默认情况下,每个标头字段都会被导出。要生成仅显示发件人、日期和主题的干净打印就绪 PDF —— 没有抄送、密送或传输标头 —— 显式关闭不需要的字段。
MailConverterX.exe "C:\mailbox\*.eml" "C:\out\" -cPDF -sender -date -subject -cc:off -bcc:off -rcpt:off
如果您需要保留完整的 RFC-822 传输标头以进行取证审查,请改为添加 -rfcheaders。
诉讼移交的 Bates 风格盖章:每页页脚带运行页码,加上带制作日期的页眉。[page] 和 [date] 是内置的占位符。
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
向对方律师发送特权通信的标准做法:所有者密码锁定编辑/打印权限,用户密码控制文件打开,-perm 准确授予您允许的权限。
MailConverterX.exe "C:\mailbox\*.msg" "C:\out\" -cPDF -mp "owner-pwd" -up "user-pwd" -perm Copy
一旦 MailConverterX.exe 作为服务或计划作业运行,了解发生了什么的唯一方法就是日志。-verbosity detail 每个文件写一行;-logmode append 在多次运行之间保留历史;-fo 静默覆盖较早的输出而不是在冲突时停止。
MailConverterX.exe "C:\mailbox\*.eml" "C:\out\" -cPDF -log "C:\logs\mailconv.log" -verbosity detail -logmode append -fo
当邮件归档工作进程写入队列文件而转换器消耗它时,您不希望将文件路径编码到命令行本身。-list 从文本文件中读取文件掩码(每行一个)。
MailConverterX.exe -list "C:\queues\mail-batch.txt" "C:\out\" -cPDF -log "C:\logs\mailconv.log"
-docs 附件转换引擎,可将每个受支持的附件(Word、Excel、PowerPoint、图像、PDF)渲染为目标格式,并与邮件正文合并到同一个输出 PDF 中。如果只需对邮箱做普通归档,请选择标准版;如果需要将整个邮件线程作为一份独立 PDF 交付用于电子取证,请选择 Pro 版。new COM("MailConverter.MailConverterX"),.NET 中使用 new MailConverterX(),Python 中使用 win32com.client.Dispatch("MailConverter.MailConverterX"),Ruby 中使用 WIN32OLE.new('MailConverter.MailConverterX')。此外,MailConverterX.exe 命令行程序也可被任何进程、调度器或 shell 脚本调用。还提供 ConvertToStream,可在 ASP/PHP 网页响应中直接流式输出 PDF。-c <FORMAT> 指定目标格式。-attach 启用附件提取。默认情况下,附件会保存在与输出 PDF 相同的文件夹中。使用 -atemplate "[mail]_[attach_index]_[attach]" 可基于邮件和附件元数据定义自定义命名模式。再加上 -uattach 可自动解压 ZIP 附件,使其内容与其他文件一同保存。再加上 -images 可将内嵌图像直接嵌入 PDF 正文,而不是另存为独立文件。-mp "owner-pwd" 设置所有者密码(控制权限);-up "user-pwd" 限制文件的打开;-perm 接受 Print、HighResPrint、Copy、Modify、Annotation、FormFill 的任意组合。Bates 戳请使用 -HeadText/-FootText,并配合占位符 [page]、[date]、[time],再用 -HeadAlign/-FootAlign 指定文本位置。结合 -combine -sort date,可为整个邮件线程生成一份带 Bates 戳的单个 PDF。