phps-cans/imapi

IMAP API

0.2.4 2016-09-03 09:13 UTC

This package is not auto-updated.

Last update: 2024-09-23 16:06:30 UTC


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');