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

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

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

【问题讨论】:

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

标签: php parsing mime eml


【解决方案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();

【讨论】:

    猜你喜欢
    • 2019-02-08
    • 2013-09-30
    • 2010-10-30
    • 1970-01-01
    • 2019-06-02
    • 2018-06-25
    • 2012-01-19
    相关资源
    最近更新 更多