php-mime-mail-parser/php-mime-mail-parser
Composer 安装命令:
composer require php-mime-mail-parser/php-mime-mail-parser
包简介
A fully tested email parser for PHP 8.2+ (mailparse extension wrapper).
README 文档
README
Introduction
A fully tested email parser for PHP 8.2+ (mailparse extension wrapper).
It's the most effective PHP email parser around in terms of performance, foreign character encoding, attachment handling, and ease of use. Internet Message Format RFC 822, 2822, 5322.
Why?
This extension can be used to...
- Parse and read email from Postfix
- Read messages (Filename extension:
.eml) - Create webmail
- Store email information such a subject, HTML body, attachments, etc. into a database
Is it reliable?
Yes. All known issues have been reproduced, fixed and tested.
We use GitHub Actions, Codecov, Codacy to help ensure code quality. You can see real-time statistics below:
How do I install it?
The easiest way is via Composer.
To install the latest version of PHP MIME Mail Parser, run the command below:
composer require php-mime-mail-parser/php-mime-mail-parser
Requirements
The following versions of PHP are supported:
- PHP 8.2
- PHP 8.3
- PHP 8.4
- PHP 8.5
Previous Versions:
| PHP Compatibility | Version |
|---|---|
| HHVM | php-mime-mail-parser 2.11.1 |
| PHP 5.4 | php-mime-mail-parser 2.11.1 |
| PHP 5.5 | php-mime-mail-parser 2.11.1 |
| PHP 5.6 | php-mime-mail-parser 3.0.4 |
| PHP 7.0 | php-mime-mail-parser 3.0.4 |
| PHP 7.1 | php-mime-mail-parser 5.0.5 |
| PHP 7.2 | php-mime-mail-parser 7.1.2 |
| PHP 7.3 | php-mime-mail-parser 7.1.2 |
| PHP 7.4 | php-mime-mail-parser 7.1.2 |
| PHP 8.0 | php-mime-mail-parser 9.0.1 |
| PHP 8.1 | php-mime-mail-parser 9.0.1 |
Make sure you have the mailparse extension (http://php.net/manual/en/book.mailparse.php) properly installed. The command line php -m | grep mailparse needs to return "mailparse".
Install mailparse extension
Debian, Ubuntu & derivatives
sudo apt install php-cli php-mailparse
MacOS
brew install php
pecl install mailparse
Other platforms
sudo apt install php-cli php-pear php-dev
pecl install mailparse
From source
AAAAMMDD should be php-config --extension-dir
git clone https://github.com/php/pecl-mail-mailparse.git
cd pecl-mail-mailparse
phpize
./configure
make
sudo mv modules/mailparse.so /usr/lib/php/AAAAMMDD/
echo "extension=mailparse.so" | sudo tee /etc/php/<your-php-version>/mods-available/mailparse.ini
sudo phpenmod mailparse
Windows
You need to download mailparse DLL from http://pecl.php.net/package/mailparse and add the line extension=php_mailparse.dll to php.ini accordingly.
How do I use it?
Loading an email
You can load an email in 4 differents ways:
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"));
Get the metadata of the message
Get the sender and the receiver:
$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]]
Get the subject:
$subject = $parser->getHeader('subject');
Get other headers:
$stringHeaders = $parser->getHeadersRaw(); // return all headers as a string, no charset conversion $arrayHeaders = $parser->getHeaders(); // return all headers as an array, with charset conversion
Get the body of the message
$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
Get attachments
Save all attachments in a directory
$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, PhpMimeMailParser\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, PhpMimeMailParser\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, PhpMimeMailParser\Parser::ATTACHMENT_DUPLICATE_THROW); // return an exception when there is attachments duplicate.
Get all attachments
$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)
Loop through all 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/', PhpMimeMailParser\Parser::ATTACHMENT_DUPLICATE_SUFFIX); // return the path and the filename saved (same strategy available than saveAttachments) }
Alternatives
If you're looking for alternatives to this library, here are a few options you might consider:
- zbateson/mail-mime-parser: If you prefer not to use the mailparse extension, this library is a good alternative. However, parsing will likely be slower.
- DirectoryTree/ImapEngine: If you need to parse emails available on an IMAP server, this library can meet your needs.
- Mailcare: A service that acts as both an email receiving server and a parser, and can be connected with any code. It's a SaaS solution that can simplify incoming email management.
Postfix configuration to manage email from a mail server
To forward mails from Postfix to the PHP script above, add this line at the end of your /etc/postfix/master.cf
(to specify myhook to send all emails to the script test.php):
myhook unix - n n - - pipe flags=F user=www-data argv=php -c /etc/php8/apache2/php.ini -f /var/www/test.php ${sender} ${size} ${recipient}
Edit this line (register myhook)
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
The PHP script must use the fourth method (see above) to work with this configuration.
Can I contribute?
Feel free to contribute!
git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
cd php-mime-mail-parser
composer install
./vendor/bin/phpunit
If you report an issue, please provide the raw email that triggered it. This helps us reproduce the issue and fix it more quickly.
License
The php-mime-mail-parser/php-mime-mail-parser is open-sourced software licensed under the MIT license
php-mime-mail-parser/php-mime-mail-parser 适用场景与选型建议
php-mime-mail-parser/php-mime-mail-parser 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10.46M 次下载、GitHub Stars 达 991, 最近一次更新时间为 2015 年 04 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「mail」 「php」 「parser」 「mime」 「mailparse」 「MimeMailParser」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 php-mime-mail-parser/php-mime-mail-parser 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 php-mime-mail-parser/php-mime-mail-parser 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 php-mime-mail-parser/php-mime-mail-parser 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Easy to use SDK with grabber for multiple platforms at once like YouTube, Dailymotion, Facebook and more.
An MT940 bank statement parser for PHP
Courier offers a convenient and painless solution for creating emails tailored for your Kirby website.
Laravel integration for the jsonapi.org parser
Mail libraries used by Zimbra Api
Email+ extends Kirby's email capabilities by adding support for multiple email services using the same Kirby email API.
统计信息
- 总下载量: 10.46M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1003
- 点击次数: 28
- 依赖项目数: 38
- 推荐数: 13
其他信息
- 授权协议: MIT
- 更新时间: 2015-04-26
