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

4

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

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


6
那不是一个问题,而是一个谷歌搜索请求。如果你在寻找代码,请访问http://pear.php.net/package/Mail_Mime/. - hakre
我同意Hakre的观点,请解释一下你到目前为止尝试过什么。 - Luceos
2个回答

6

这个是我使用的东西:

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();

5

但是即使是php.net上的php扩展程序mailparse,也不能很好地处理一些eml文件。当eml文件源代码像这样———Return-Path:test@mail.com.cn Delivered-To:aa@mail.com.cn*X-WM-Delivered:bb@mail.com.cn ....————时,我无法获取eml头部信息,例如主题、时间、发送者等。每个项目之间没有空行,因此无法解析。 - maarten
1
最后我在这里找到了一个PHP库 http://www.phpclasses.org/package/3169-PHP-Decode-MIME-e-mail-messages.html 但它并不好用。当eml文件的源头项没有换行符时,它无法解析eml文件。 - maarten
`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` - maarten
这里缺少一个 > 符号:"To: "all" <all@mail.com.cn " - Doa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接