includable / email-reply-parser
GitHub 的 EmailReplyParser 库的 PHP 版本
此包的官方仓库似乎已消失,因此该包已被冻结。
2.8.1
2018-12-24 16:00 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: ^4.8.35|^5.7
README
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 文件。
鸣谢
- GitHub
- William Durand william.durand1@gmail.com
许可证
EmailReplyParser 在 MIT 许可证下发布。有关详细信息,请参阅附带 LICENSE 文件。