lasso / mail-parser-bundle
使用Zend框架库解析邮件
Requires
- zendframework/zend-mail: 2.5.2
README
当您想轻松访问电子邮件内容时使用。Zend框架提供了解析电子邮件的类,但使用起来可能有点笨拙。例如,电子邮件被分割成部分,您必须遍历电子邮件中的所有部分(电子邮件本身也被视为一个部分)以访问内容。
#功能
Lasso 邮件解析器提供了一种简单的方法从电子邮件中获取HTML或文本内容,同时丢弃文件附件。如果同时提供了HTML和文本部分,则优先选择HTML。
#工作原理
使用Zend邮件解析器解析电子邮件。然后按内容类型递归地分组其部分,例如 'text/plain' 或 'text/html'。如果找到任何HTML或文本部分,则将它们连接起来并返回结果。如果没有找到此类部分,则返回null。
连接字符串由对用户定义函数的调用确定,这使得灵活的连接成为可能。
#使用方法
由于这是一个symfony捆绑包,您可以将此存储库添加到您的composer.json文件中
https://packagist.org.cn/packages/lasso/mail-parser-bundle
然后像这样请求解析器
$parser = $container->get('lasso_mail_parser.parser');
当然,您也可以通过将其添加到services.xml作为参数来使用依赖注入。
一旦您有了解析器实例,就可以像这样解析原始电子邮件源
$parser->parse(YOUR-EMAIL-BODY);
然后您可以使用
$emailAddresses = $parser->getAllEmailAddresses();
从电子邮件中提取电子邮件地址。您可以通过传递包含您希望使用的字段名的数组来限制用于提取的字段
// Only retrieve recipients
$receiverEmailAddresses = $parser->getAllEmailAddress(['to', 'cc', 'bcc']);
使用
$content = $parser->getPrimaryContent();
来获取主要内容。如果存在HTML,则这将将是HTML,否则将是纯文本。您可以将自定义的粘合函数传递进去
$glue = function($contentType) {
switch ($contentType) {
case 'text/plain':
return "\n====\n";
case 'text/html':
return '<hr />';
}
return '';
}
$content = $parser->getPrimaryContent($glue);
现在所有HTML部分将使用hr标签连接,所有文本部分将使用换行符和'===='连接。
如果您正在处理通过信封日志记录发送的电子邮件(例如来自Office365),您可以通过以下方式访问封装的电子邮件
$parser->getEnvelopedEmail();
这将返回一个普通部分,您可以通过它访问内容/标题。要检查电子邮件是否有封装的电子邮件附件,您可以使用
$parser->hasEnvelopedEmail();