razzbee/php-libimap

一个纯面向对象(OOP)的PHP IMAP库,易于使用且性能优化

v1.0.1-alpha 2016-09-04 22:57 UTC

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 : 可选的邮箱名称,你想在其中进行搜索,如果省略邮箱名称,将使用当前打开的邮箱。