如何在 php 中解析 .eml 文件?

Posted

技术标签:

【中文标题】如何在 php 中解析 .eml 文件?【英文标题】:How to parse a .eml file in php? 【发布时间】:2012-07-09 16:31:46 【问题描述】:

如何在php中解析.eml文件?是否有任何 PHP 库或 PHP 扩展?

我想在浏览器中显示发件人、收件人、标题、附件和eml正文内容等邮件头信息。

【问题讨论】:

这不是问题,而是谷歌请求。 - 如果您正在寻找代码:pear.php.net/package/Mail_Mime 我同意 Hakre 的观点,请解释一下你到目前为止所做的尝试...... 【参考方案1】:

有几种方法可以做到这一点。一种方法是自己动手,没那么复杂。

否则,您可能想看看 Mailparse 库:

http://php.net/manual/en/book.mailparse.php

还有这个:

http://code.google.com/p/php-mime-mail-parser/

【讨论】:

但是即使是 php.net 中的 php 扩展 mailparse 也不能很好地处理一些 eml 文件。当 eml 文件源像这样时,我无法获取主题、时间、发件人等 eml 标头信息—— ------------Return-Path: Delivered-To:aa@mail.com.cn*X-WM-Delivered:bb@mail.com.cn . ...------------- erver 项之间不是空行。所以无法解析 最后我在这里找到了一个php libaray phpclasses.org/package/… 但它不能正常工作。当eml文件头项的来源没有断行时,它无法解析eml文件。 Return-Path: <test@mail.com.cn> Delivered-To: test@mail.com.cn X-WM-Delivered: test@mail.com.cn Delivered-To: receive@mail.com.cn X-WM-Delivered: all@mail.com.cn Received: from PC-201104191348 ([211.154.169.179]) (envelope-sender <test@mail.com.cn>) by 125.208.8.125 with ESMTP Date: Tue, 3 Jul 2012 12:28:16 +0800 From: "test" <test@mail.com.cn To: "all" <all@mail.com.cn Cc: "bb" <bb@mail.com.cn> Subject: =?gb2312?B?ufq80s2zvMa+1jIwMTLE6jfUws+1zbPJ/by2z+7Ev82o1qo=?= Message-ID: <201207031228157969470@mail.com.cn> X-mailer: Foxmail 6, 15, 201, 23 [cn] Mime-Version: 1.0 这里少了一个>:"To:"all"【参考方案2】:

This 是我用的:

composer require php-mime-mail-parser/php-mime-mail-parser

然后是 PHP:

$parser = new \PhpMimeMailParser\Parser();
$emailFile = 'myEmailFile.eml';
$parser->setText(file_get_contents($emailFile));

然后,获取地址:

$toAddressesQ = $parser->getAddresses('to');

或者身体:

$text = $parser->getMessageBody('text');
$html = $parser->getMessageBody('html');

或标题:

$subject = $parser->getHeader('subject');

或附件:

$attachments = $parser->getAttachments();

【讨论】:

以上是关于如何在 php 中解析 .eml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何解析EML(邮件)格式的文件以及一款小巧的EML邮件阅读工具

从python中的.eml文件解析excel附件

在 C# 中解析 .eml 文件的建议

在 C# 中解析 .eml 文件的建议

如何在 Outlook 中编辑使用 email.generator 生成的 .eml 文件?

如何快速打开 .msg 和 .eml 文件?