exorus / php-mime-mail-parser
适用于PHP 8.0+的全面测试的邮件解析器(mailparse扩展包装器)。
Requires
- php: ^8.0
- ext-mailparse: *
Requires (Dev)
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.5
Replaces
- dev-main
- 8.0.4
- 8.0.3
- 8.0.2
- 8.0.1
- 8.0
- 7.1.2
- 7.1.1
- 7.1.0
- 7.0.0
- 6.0.0
- 5.0.5
- 5.0.4
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.11.1
- 2.11.0
- 2.10.0
- 2.9.6
- 2.9.5
- 2.9.4
- 2.9.3
- 2.9.2
- 2.9.1
- 2.9.0
- 2.8.0
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.1
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- v1.2.0
- v1.1.0
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-fix-issue-408
- dev-next
- dev-refacto-tests
- dev-release-7.0
- dev-issue-332
- dev-issue-331
This package is auto-updated.
Last update: 2024-09-18 09:20:07 UTC
README
适用于PHP 8.0+的全面测试的邮件解析器(mailparse扩展包装器)。
在性能、外文编码、附件处理和使用便捷性方面,它是目前最有效的PHP邮件解析器。遵循Internet Message Format RFC 822、2822、5322。
为什么?
此扩展可用于...
- 解析和读取来自Postfix的邮件
- 读取消息(文件扩展名:
.eml
) - 创建Web邮件
- 将邮件信息(如主题、HTML正文、附件等)存储到数据库中
它可靠吗?
是的。所有已知问题都已重现、修复并测试。
我们使用GitHub Actions、Codecov、Codacy来帮助确保代码质量。您可以在下面查看实时统计数据。
如何安装它?
最简单的方法是使用Composer。
要安装PHP MIME Mail Parser的最新版本,请运行以下命令
composer require php-mime-mail-parser/php-mime-mail-parser
要求
以下版本的PHP受支持
- PHP 8.0
- PHP 8.1
- PHP 8.2
- PHP 8.3
以前的版本
请确保已正确安装mailparse扩展(https://php.ac.cn/manual/en/book.mailparse.php)。命令行php -m | grep mailparse
需要返回"mailparse"。
安装mailparse扩展
Debian、Ubuntu及衍生版本
sudo apt install php-cli php-mailparse
MacOS
brew install php
pecl install mailparse
其他平台
sudo apt install php-cli php-pear php-dev php-mbstring
pecl install mailparse
从源代码
AAAAMMDD应该是php-config --extension-dir
git clone https://github.com/php/pecl-mail-mailparse.git
cd pecl-mail-mailparse
phpize
./configure
sed -i 's/#if\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c
make
sudo mv modules/mailparse.so /usr/lib/php/AAAAMMDD/
echo "extension=mailparse.so" | sudo tee /etc/php/7.1/mods-available/mailparse.ini
sudo phpenmod mailparse
Windows
您需要从http://pecl.php.net/package/mailparse下载mailparse DLL,并将extension=php_mailparse.dll
行添加到相应的php.ini
中。
如何使用它?
加载邮件
您可以通过4种不同方式加载邮件
require_once __DIR__.'/vendor/autoload.php'; $path = 'path/to/email.eml'; $parser = new PhpMimeMailParser\Parser(); // 1. Either specify a file path (string) $parser->setPath($path); // 2. or specify the raw mime mail text (string) $parser->setText(file_get_contents($path)); // 3. or specify a php file resource (stream) $parser->setStream(fopen($path, "r")); // 4. or specify a stream to work with a mail server (stream) $parser->setStream(fopen("php://stdin", "r"));
获取消息的元数据
获取发件人和收件人
$rawHeaderTo = $parser->getHeader('to'); // return "test" <test@example.com>, "test2" <test2@example.com> $arrayHeaderTo = $parser->getAddresses('to'); // return [["display"=>"test", "address"=>"test@example.com", false]] $rawHeaderFrom = $parser->getHeader('from'); // return "test" <test@example.com> $arrayHeaderFrom = $parser->getAddresses('from'); // return [["display"=>"test", "address"=>"test@example.com", "is_group"=>false]]
获取主题
$subject = $parser->getHeader('subject');
获取其他标题
$stringHeaders = $parser->getHeadersRaw(); // return all headers as a string, no charset conversion $arrayHeaders = $parser->getHeaders(); // return all headers as an array, with charset conversion
获取消息正文
$text = $parser->getMessageBody('text'); // return the text version $html = $parser->getMessageBody('html'); // return the html version $htmlEmbedded = $parser->getMessageBody('htmlEmbedded'); // return the html version with the embedded contents like images
获取附件
将所有附件保存到目录中
$parser->saveAttachments('/path/to/save/attachments/'); // return all attachments saved in the directory (include inline attachments) $parser->saveAttachments('/path/to/save/attachments/', false); // return all attachments saved in the directory (exclude inline attachments) // Save all attachments with the strategy ATTACHMENT_DUPLICATE_SUFFIX (default) $parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_SUFFIX); // return all attachments saved in the directory: logo.jpg, logo_1.jpg, ..., logo_100.jpg, YY34UFHBJ.jpg // Save all attachments with the strategy ATTACHMENT_RANDOM_FILENAME $parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_RANDOM_FILENAME); // return all attachments saved in the directory: YY34UFHBJ.jpg and F98DBZ9FZF.jpg // Save all attachments with the strategy ATTACHMENT_DUPLICATE_THROW $parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_THROW); // return an exception when there is attachments duplicate.
获取所有附件
$attachments = $parser->getAttachments(); // return an array of all attachments (include inline attachments) $attachments = $parser->getAttachments(false); // return an array of all attachments (exclude inline attachments)
遍历所有附件
foreach ($attachments as $attachment) { echo 'Filename : '.$attachment->getFilename().'<br>'; // return logo.jpg echo 'Filesize : '.filesize($attach_dir.$attachment->getFilename()).'<br>'; // return 1000 echo 'Filetype : '.$attachment->getContentType().'<br>'; // return image/jpeg echo 'MIME part string : '.$attachment->getMimePartStr().'<br>'; // return the whole MIME part of the attachment $stream = $attachment->getStream(); // get the stream of the attachment file $attachment->save('/path/to/save/myattachment/', Parser::ATTACHMENT_DUPLICATE_SUFFIX); // return the path and the filename saved (same strategy available than saveAttachments) }
Postfix配置以管理来自邮件服务器的邮件
要将来自Postfix的邮件转发到上面的PHP脚本,请在/etc/postfix/master.cf
的末尾添加此行(指定myhook将所有邮件发送到脚本test.php
)
myhook unix - n n - - pipe
flags=F user=www-data argv=php -c /etc/php5/apache2/php.ini -f /var/www/test.php ${sender} ${size} ${recipient}
编辑此行(注册myhook)
smtp inet n - - - - smtpd
-o content_filter=myhook:dummy
PHP脚本必须使用上述第四种方法(见上面)才能与该配置一起工作。
最后,最简单的方法是使用我的SaaShttps://mailcare.io
我可以贡献吗?
请随时贡献!
git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
cd php-mime-mail-parser
composer install
./vendor/bin/phpunit
如果您报告了一个问题,请提供触发该问题的原始邮件。这有助于我们更快地重现并修复问题。
许可证
php-mime-mail-parser/php-mime-mail-parser 是一个开源软件,遵循 MIT 许可协议