includable/email-reply-parser

GitHub 的 EmailReplyParser 库的 PHP 版本

此包的官方仓库似乎已消失,因此该包已被冻结。

2.8.1 2018-12-24 16:00 UTC

README

Build Status Total Downloads Latest Stable Version PHP7 ready

EmailReplyParser 是一个基于 GitHub 的 email_reply_parser(Ruby 编写)库的 PHP 库,用于解析纯文本电子邮件内容。

安装

安装 EmailReplyParser 的推荐方式是通过 Composer

composer require willdurand/email-reply-parser

使用方法

实例化一个 EmailParser 对象并解析您的电子邮件

<?php

use EmailReplyParser\Parser\EmailParser;

$email = (new EmailParser())->parse($emailContent);

您将获得一个包含一组 Fragment 对象的 Email 对象。Email 类公开了两个方法

  • getFragments():返回所有片段;
  • getVisibleText():返回表示“可见”内容的字符串。

Fragment 代表完整电子邮件内容的一部分,并具有以下 API

<?php

$fragment = current($email->getFragments());

$fragment->getContent();

$fragment->isSignature();

$fragment->isQuoted();

$fragment->isHidden();

$fragment->isEmpty();

或者,您可以使用 EmailReplyParser 在一行代码中解析电子邮件或获取其可见内容

$email = \EmailReplyParser\EmailReplyParser::read($emailContent);

$visibleText = \EmailReplyParser\EmailReplyParser::parseReply($emailContent);

已知问题

引述标题

如果存在额外的换行符,则不会提取引述标题

On <date>, <author> wrote:

> blah

此外,如果电子邮件客户端将其拆分成多行,则也不会提取。GMail 会为您将任何超过 80 个字符的行拆分。

On <date>, <author>
wrote:
> blah

上面的 On ....wrote: 可以使用以下正则表达式进行清理

$fragment_without_date_author = preg_replace(
    '/\nOn(.*?)wrote:(.*?)$/si',
    '',
    $fragment->getContent()
);

注意,我们正在寻找“on”和“wrote”。因此,它不适用于其他语言。

可能的解决方案:删除 "reply@reply.github.com" 行...

奇怪的签名

-_ 开头的行有时标记签名的开始

Hello

--
Rick

并非所有人都遵循此约定

Hello

Mr Rick Olson
Galactic President Superstar Mc Awesomeville
GitHub

**********************DISCLAIMER***********************************
* Note: blah blah blah                                            *
**********************DISCLAIMER***********************************

奇怪的引述

显然,在行前添加 > 并非通用

Hello

--
Rick

________________________________________
From: Bob [reply@reply.github.com]
Sent: Monday, March 14, 2011 6:16 PM
To: Rick

单元测试

使用 Composer 设置测试套件

$ composer install

使用 PHPUnit 运行它

$ phpunit

贡献

请参阅 CONTRIBUTING 文件。

鸣谢

许可证

EmailReplyParser 在 MIT 许可证下发布。有关详细信息,请参阅附带 LICENSE 文件。