我正在开发一个PHP驱动的web应用程序,我需要从Outlook.msg中提取附件。我对PHP、Python和邻近的web语言没有任何疑问,所以请放心。如果有人好奇,任务是检查电子邮件地址,获取正文和附件,并将它们添加到DMS中。我已经在谷歌上搜索了几个小时,我发现没有简单的方法(比如PHP类或类似的),所以任何解决方法都会非常感激:)
Outlook MSG文件实际上是COM结构化存储。您可以使用PEAROLE读取它们。但是,该页面声称它是未经维护的。
请记住,即使您设法打开文档,也需要了解其内部布局才能找到任何内容。FileFormats似乎列出了一些有用的内部信息,您可能希望在浏览MSG文件时将其作为参考。
我找到的唯一方法是在Windows服务器上使用MailConverter命令行将文件处理成HTML。这个项目大约60美元。
首先,使用MailConverter命令行生成器,创建一个模板批处理文件,以便处理任何文件。我用两个占位符[[SOURCE]]和[[DESTINATION]]更改了实际文件名。
chcp 65001
"C:Program Files (x86)CoolUtilsTotalMailConverterMailConverter.exe" "[[SOURCE]]" "[[DESTINATION]]" -kfs -c XHTML -template [name] -body -clearsubj -timeout 10000 -dpi 300 -pc M -PDFAuthor Softplicity -PDFProducer Softplicity -TM 0.3 -LM 0.3 -BM 0.3 -RM 0.3 -ps A4 -tc G4 -tjq 80 -multipage -HeadText "Page [page]" -HeadAlign c -HeadFont Tahoma -HeadSize 10 -FootText [date] -FootAlign c -FootFont Tahoma -FootSize 10 -toclinestyle D -toclinecolor silver -tocfont [Calibri,11,black] -tocmargins [0.80,0.80,0.80,0.80] -dco [TOC]
然后php代码替换占位符并生成最终的批处理文件,然后运行它来输出html。此代码当前处于生产环境中。
如果您尝试两次处理同一个输出文件,它会挂断,因此您必须首先检查输出文件是否存在。
<?php
$filename = "template.bat";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
//any name ok for output
$new_path = str_replace(".msg", "converted.html", $path);
if (!file_exists($new_path)) {
$new_content = str_replace("[[SOURCE]]", $path, $contents);
$new_content = str_replace("[[DESTINATION]]", $new_path, $new_content);
//write the new batch command to a new file
$fp = fopen('convert.bat', 'w');
fwrite($fp, $new_content);
fclose($fp);
//run the batch file
passthru ('convert.bat');
//wait a couple of seconds to let the exe process the file
sleep(2);
}
$filename = $new_path;
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
die($contents);
?>