razzbee / php-libimap
一个纯面向对象(OOP)的PHP IMAP库,易于使用且性能优化
Requires
- php: >=5.4
- ext-imap: *
This package is not auto-updated.
Last update: 2024-09-14 19:25:45 UTC
README
php-libimap是一个纯OOP的PHP imap库,旨在使原生的php_imap函数更易于使用,并考虑到了性能优化。
安装
使用composer,在您的 composer.json 文件中包含以下内容
"razzbee/php-libimap" : "dev-master"
使用方法
初始化类
$imap = new \PHPLibImap\IMAP;
连接IMAP服务器
$imap->connectServer([ 'host' => 'localhost', 'port' => 993, 'imap_username' => 'username@domain.tld', 'password' => 'secret', 'mailbox_name' => 'INBOX', 'enableSSL' => true, ]);
host:您的IMAP邮件服务器主机名,例如:localhost,19.10.10.2,imap.domain.tld或domain.tld
port:您的邮件服务器的IMAP端口号,安全连接的默认端口号为993,非安全连接端口号为143
imap_username:邮件账户的完整电子邮件地址,例如:you@example.com
password:您的邮件账户密码。
mailbox_name:(可选)在初始连接时打开的邮箱,如果未指定,则使用INBOX。
enableSSL:(可选)如果您使用自定义端口,则需要此设置以便库知道端口是否需要安全连接。
切换邮箱
连接到服务器后,将自动打开连接参数中提供的可选mailbox_name,您可以使用以下方式更改或切换邮箱
$imap-> switchMailBox('mailbox_name');
mailbox_name必须是您的邮件服务器中邮件文件夹或邮箱的名称之一,例如:INBOX,草稿,垃圾邮件或回收站
获取邮箱(邮件文件夹)列表
您还可以列出邮件服务器中可用的邮箱
$mailBoxes = $imap->getMailBoxes($pattern);
$pattern:(可选)这是*或%,其中
* 表示库应获取所有邮箱,包括顶级邮箱和子文件夹
% 表示库应获取当前邮箱中的所有子文件夹
更多信息请参阅:https://php.ac.cn/manual/en/function.imap-getmailboxes.php
获取邮箱信息
$mailBoxInfo = $imap->getMailBoxInfo($mailboxName=null,$forceNew=false);
$mailBoxName:(可选)您想获取信息的邮箱名称,如果未设置,则默认为当前打开的邮箱
$forceNew:(可选)邮箱信息始终预先获取并保留,但如果您希望获取信息的最新副本,请将此设置为true。
计算总新消息数量
$totalRecent = $imap->getMailBoxInfo()->recent;
计算邮箱中未读消息的总数
$totalMsgNo = $imap->getTotalMessages(); //or $totalMsgNo = $imap->getMailBoxInfo()->messages;
从邮箱中获取邮件
此库有许多从邮箱获取邮件的方式,我们也针对速度和性能优化了此特定功能。
通过UID获取邮箱项目概述
$mails = $imap->fetchMailBoxItems("mailbox_name") ->select(uid1,uid2,uid3,uid4...uidN) ->getResults();
mailbox_name:(可选)可选邮箱名称,如果没有提供,则使用当前打开的邮箱
select(uid1,uid2, ... ):通过uid或邮件的整数id(s)选择邮件头,您必须提供有效的uid,否则将生成异常
getResults:生成并获取结果
使用范围获取邮件概述
$mails = $imap->fetchMailBoxItems("mailbox_name") ->range(1,10) ->orderById('desc') ->getResults();
range(arg1,arg2):邮件uid的范围,上述示例将拉取uid 1到10的邮箱项目概述信息,此方法假设您已经知道您的范围。
orderById:按uid排序结果,默认为DESC(降序),这意味着最新的邮件概述信息将首先显示
使用limit和Offset获取邮件概述
类似于mysql limit和offset,此库支持使用limit($limit,$offset)方法进行limit和offset。
$mails = $imap->fetchMailBoxItems("mailbox_name") ->limit(1,10) ->orderById('desc') ->getResults();
limit($limit,$offset=0) : limit() 方法接受两个参数:limit 和 offset。内部自动将限制和偏移量计算为范围,如果你不清楚范围值或邮箱中的数据量,使用此方法更安全。offset 是可选的,默认值为 0。
在邮箱之间移动邮件
此方法用于在邮箱或文件夹之间移动电子邮件,成功时返回 true,失败时返回 false,错误情况下也会抛出异常。
$move = $imap->moveMail($mails_uids_array,$source_mailbox,$destination_mailbox,$expunge=false);
$mails_uids_array : 数组中邮件的数字 uid,可以包含 1 个或多个有效 id。
$source_mailbox : 邮件当前所在的邮箱名称,例如:INBOX,Drafts 等。
$destination_mailbox : 你想将邮件移动到的新的邮箱名称,例如:Spam,drafts 等。
$expunge : 可选的布尔值,告诉库在移动后将立即清理或删除源邮箱中的电子邮件。
### 标记邮件为已读、已回复、已删除、草稿或标记
$setFlag = $imap->setFlag($mails_uids_array,$flag,$mailBoxName);
$mails_uids_array : 数组中邮件的数字 uid,可以包含 1 个或多个有效 id。
$flag : 要设置的标志,有效的标志有:seen,answered,deleted,draft 或 flagged。
$mailBoxName : 如果你没有提供,将设置标志的邮箱名称,否则将使用当前打开的邮箱。
搜索邮件
使用给定的标准在邮箱中进行搜索,使用 getResults() 方法检索结果。
$keyword = "hello"; //body must contain at least one occurrance of the keyword $searchCritiria['BODY'] = $keyword; //subject too must contain at least one occurrance of the keyword $searchCritiria['SUBJECT'] = $keyword; $mailBoxName = "INBOX"; $searchResults = $imap ->search($searchCritiria,$mailBoxName) ->limit(20) ->getResults();
$keyword : 我们要搜索的字符串 $searchCritiria : 用于搜索的搜索标准,有关标准的更多信息请参阅这里:[https://php.ac.cn/manual/en/function.imap-search.php](https://php.ac.cn/manual/en/function.imap-search.php)
$mailBoxName : 可选的邮箱名称,你想在其中进行搜索,如果省略邮箱名称,将使用当前打开的邮箱。