abrgitlab/email-reply-parser

PHP版的GitHub的EmailReplyParser库移植

2.8.1 2019-01-17 12:51 UTC

README

Build Status Total Downloads Latest Stable Version PHP7 ready

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

安装

推荐通过Composer安装EmailReplyParser。

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文件。