phps-cans / imapi
0.2.4
2016-09-03 09:13 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: ~5.0
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); // ... } }
高级查询
Both getEmails()
和 getEmailIds()
都可以接受一个可选的 Query
对象。
// Read from the `INBOX.Sent` folder $query = QueryBuilder::create('INBOX.Sent') ->youngerThan(3600) // 1 hour ->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');