mnapoli / imapi
IMAP API
0.2.7
2018-01-30 17:44 UTC
Requires
- php: ~7.0
- ezyang/htmlpurifier: ~4.7
- pear-pear.horde.org/horde_imap_client: ~2.19
- php-mime-mail-parser/php-mime-mail-parser: ~2.0
Requires (Dev)
- phpunit/phpunit: ~6.4
README
这个库是实验性的,并不打算重用。
imapi 是 PHP 的一个高级 IMAP API。
它旨在与其他实现不同
- 非常高级:你不需要知道 IMAP 的工作原理(因为 IMAP 非常糟糕)
- 处理相关问题,如 解析 MIME 电子邮件内容 或 清理电子邮件中的 HTML
- 基于 Horde 的 IMAP 库,而不是 PHP 的 IMAP 扩展(下面解释)
- 功能全面,同时为未覆盖的功能保留调用 Horde 库的低级别调用的入口
- 维护(遗憾的是,IMAP 不是一个非常活跃的话题,许多优秀项目未完成或已死亡)
它不是基于 PHP 的 IMAP 扩展,而是基于令人惊叹的 Horde 库。原因在Horde 库页面上有很好的解释
与 PHP 的 imap (c-client) 扩展相比,Horde/Imap_Client 在速度、功能丰富性和可扩展性方面都显著更好。
不要被迷惑:几乎每一个所谓的“PHP IMAP 库”都不过是 imap 扩展的一个薄包装,所以这些库都不能解决该扩展的基本限制。
入门指南
composer require mnapoli/imapi
简单方法
$client = Imapi\Client::connect('imap.host.com', 'user', 'password');
如果您想要完全控制连接,您可以使用 Horde 的构造函数
$hordeClient = new Horde_Imap_Client_Socket([ 'username' => $username, 'password' => $password, 'hostspec' => $host, 'port' => '143', 'secure' => 'tls', ]); $client = new Imapi\Client($hordeClient);
阅读
阅读收件箱
获取收件箱中的所有消息
$emails = $client->getEmails(); foreach ($emails as $email) { echo $email->getSubject(); }
是的,就这么简单。电子邮件是对象(Imapi\Email
),它们公开了电子邮件的所有信息。
如果您需要将存储在本地与 IMAP 服务器同步的电子邮件,您可能不想获取电子邮件,即它们的内容。您只需要获取它们的 ID,这要快得多
$ids = $client->getEmailIds(); foreach ($ids as $id) { if (/* this email needs to be synced */) { $email = $client->getEmailFromId($id); // ... } }
高级查询
getEmails()
和 getEmailIds()
都可以接受一个可选的 Query
对象。
// Read from the `INBOX.Sent` folder $query = QueryBuilder::create('INBOX.Sent') ->youngerThan(3600) // 1 hour ->flagSeen(true) // return messages with \\seen flag set, or false for messages with seen flag off. // more options are flagAnswered(boolean), flagDeleted(boolean),flagDraft(boolean),flagFlaged(boolean),flagRecent(boolean) ->getQuery(); $emails = $client->getEmails($query);
阅读文件夹
$folders = $client->getFolders();
操作
移动电子邮件
$emailIds = ['123', '456']; // Moving from the INBOX to the Archive folder $client->moveEmails($emailIds, 'INBOX', 'Archive');
删除电子邮件
“删除”只是将它们移动到垃圾箱文件夹。不幸的是,垃圾箱文件夹对每个提供商都是定制的,所以您需要明确提供它
$emailIds = ['123', '456']; $client->deleteEmails($emailIds, 'Deleted Messages');