从.MSG中提取附件,以便在PHP应用程序中使用它们

  • 本文关键字:应用程序 PHP 提取 MSG php
  • 更新时间 :
  • 英文 :


我正在开发一个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);
?>

最新更新