vasim-seta / codeigniter-imap
CodeIgniter IMAP客户端
Requires
- php: >=5.5.9
README
[![最新版本在Packagist][ico-version]][link-packagist] ![软件许可证][ico-license] [![构建状态][ico-travis]][link-travis] [![总下载量][ico-downloads]][link-downloads]
描述
CodeIgniter IMAP是一种将原生php imap库轻松集成到您的CodeIgniter
应用程序中的方法。
注意:这个库是从webklex/laravel-imap分叉而来的,它是laravel的imap库,但我需要在CodeIgniter中使用它,并且在不做几个更改的情况下,我无法在CodeIgniter中使用它。因此,我复制了它并根据需要进行了更改。但是后来我有了发布的想法,因为可能有很多想要在CodeIgniter中使用那个laravel库而无需做任何更改的人。我还更改了我使用和需要的东西,可能会有问题或错误在其他事情上,可能会有一些laravel的垃圾文件和方法。如果你有任何问题,请随时报告,或者你可以分叉这个并自己来做。我也尝试使用webklex/php-imap,但由于一些错误,我无法使用它,而且我没有太多时间来解决这个问题。我从未创建过任何库,我对许可也不太了解,所以如果有任何关于许可或任何其他问题的疑问,请告诉我,我将从这里删除它。
目录
安装
- 如果尚未安装,请安装php-imap库
sudo apt-get install php*-imap && sudo apache2ctl graceful
您可能还想检查phpinfo()
以确认扩展已启用。
- 现在,通过运行以下命令安装CodeIgniter IMAP包
composer require vasim-seta/codeigniter-imap
配置
当调用IMAP/Client时没有设置任何设置时,它将使用以下默认设置,您可能希望将以下内容添加到您的application/config/config.php
文件中。
$config['imap']['host'] = 'localhost';
$config['imap']['port'] = 993;
$config['imap']['encryption'] = 'ssl';
$config['imap']['validate_cert'] = TRUE;
$config['imap']['username'] = 'root@example.com';
$config['imap']['password'] = '';
$config['imap.options.open'] = [];
$config['imap.options.delimiter'] = '/';
以下加密方法被支持
false
— 禁用加密ssl
— 使用SSLtls
— 使用TLS
详细的[application/config/config.php]配置
host
— imap主机port
— imap端口encryption
— 所需的加密方法validate_cert
— 决定你是否想要验证证书username
— imap账户用户名password
— imap账户密码imap.options
— 额外的检索选项delimiter
— 您可以使用任何受支持的字符,如"."、"/"等fetch
—FT_UID
(通过检索消息标记为已读)或FT_PEEK
(在不设置"read"标志的情况下检索消息)fetch_body
— 如果设置为false
,则所有消息都将检索,不包含正文和任何潜在的附件fetch_attachment
— 如果设置为false
,则所有消息都将检索,不包含任何附件open
— imap_open()的特殊配置DISABLE_AUTHENTICATOR
— 禁用身份验证属性。
使用
这是一个基本示例,它将回显所有imap文件夹内的所有邮件,并将每条消息移动到INBOX.read中。请注意,这不应该在实际环境中进行测试,但它可以给人一个了解工作原理的印象。
$oClient = new \Vasim\IMAP\Client([ 'host' => 'somehost.com', 'port' => 993, 'encryption' => 'ssl', 'validate_cert' => true, 'username' => 'username', 'password' => 'password', ]); //Connect to the IMAP Server $oClient->connect(); //Get all Mailboxes /** @var \Vasim\IMAP\Support\FolderCollection $aFolder */ $aFolder = $oClient->getFolders(); //Loop through every Mailbox /** @var \Vasim\IMAP\Folder $oFolder */ foreach($aFolder as $oFolder){ //Get all Messages of the current Mailbox $oFolder /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->getMessages(); /** @var \Vasim\IMAP\Message $oMessage */ foreach($aMessage as $oMessage){ echo $oMessage->subject.'<br />'; echo 'Attachments: '.$oMessage->getAttachments()->count().'<br />'; echo $oMessage->getHTMLBody(true); //Move the current Message to 'INBOX.read' if($oMessage->moveToFolder('INBOX.read') == true){ echo 'Message has ben moved'; }else{ echo 'Message could not be moved'; } } }
有一个实验性功能可以按名称获取文件夹实例。为了便于访问,请查看新的配置选项 imap.options.delimiter
,但是 getFolder
方法需要三个选项:必需的(字符串)$folder_name 和两个可选变量。一个整数 $attributes,有时是32或64(老实说,我不知道这个数字是做什么的,所以请随意向我和其他人解释)以及一个分隔符,如果未设置,将使用在config/imap.php 文件中配置的默认选项。
/** @var \Vasim\IMAP\Client $oClient */ /** @var \Vasim\IMAP\Folder $oFolder */ $oFolder = $oClient->getFolder('INBOX.name');
搜索特定电子邮件
/** @var \Vasim\IMAP\Folder $oFolder */ //Get all messages since march 15 2018 /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->searchMessages([['SINCE', Carbon::parse('15.03.2018')]]); //Get all messages containing "hello world" /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->searchMessages([['TEXT', 'hello world']]); //Get all unseen messages containing "hello world" /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->searchMessages([['UNSEEN'], ['TEXT', 'hello world']]);
可用的搜索条件
ALL
— 返回所有符合其他条件的消息ANSWERED
— 匹配设置了 \ANSWERED 标志的消息BCC
"字符串" — 匹配Bcc:字段中包含"字符串"的消息BEFORE
"日期" — 匹配日期在"日期"之前的消息BODY
"字符串" — 匹配消息体中包含"字符串"的消息CC
"字符串" — 匹配Cc:字段中包含"字符串"的消息DELETED
— 匹配已删除的消息FLAGGED
— 匹配设置了 \FLAGGED(有时称为重要或紧急)标志的消息FROM
"字符串" — 匹配From:字段中包含"字符串"的消息KEYWORD
"字符串" — 匹配包含"字符串"作为关键词的消息NEW
— 匹配新消息OLD
— 匹配旧消息ON
"日期" — 匹配日期与"日期"匹配的消息RECENT
— 匹配设置了 \RECENT 标志的消息SEEN
— 匹配已读消息(\SEEN 标志已设置)SINCE
"日期" — 匹配日期在"日期"之后的消息SUBJECT
"字符串" — 匹配Subject中包含"字符串"的消息TEXT
"字符串" — 匹配包含文本"字符串"的消息TO
"字符串" — 匹配To中包含"字符串"的消息UNANSWERED
— 匹配未回答的消息UNDELETED
— 匹配未删除的消息UNFLAGGED
— 匹配未标记的消息UNKEYWORD
"字符串" — 匹配不包含关键词"字符串"的消息UNSEEN
— 匹配尚未阅读的消息
更多信息
- https://php.ac.cn/manual/en/function.imap-search.php
- https://tools.ietf.org/html/rfc1176
- https://tools.ietf.org/html/rfc1064
- https://tools.ietf.org/html/rfc822
通过uid获取特定消息(请注意,uid不是唯一的,可能会更改)
/** @var \Vasim\IMAP\Folder $oFolder */ /** @var \Vasim\IMAP\Message $oMessage */ $oMessage = $oFolder->getMessage($uid = 1);
标记或"取消标记"消息
/** @var \Vasim\IMAP\Message $oMessage */ $oMessage->setFlag(['Seen', 'Spam']); $oMessage->unsetFlag('Spam');
保存消息附件
/** @var \Vasim\IMAP\Message $oMessage */ /** @var \Vasim\IMAP\Support\AttachmentCollection $aAttachment */ $aAttachment = $oMessage->getAttachments(); $aAttachment->each(function ($oAttachment) { /** @var \Vasim\IMAP\Attachment $oAttachment */ $oAttachment->save(); });
获取不带正文获取的消息(减少负载)
/** @var \Vasim\IMAP\Folder $oFolder */ /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->searchMessages([['TEXT', 'Hello world']], null, false); /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->getMessages('ALL', null, false);
获取不带正文和附件获取的消息(减少负载)
/** @var \Vasim\IMAP\Folder $oFolder */ /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->searchMessages([['TEXT', 'Hello world']], null, false, 'UTF-8', false); /** @var \Vasim\IMAP\Support\MessageCollection $aMessage */ $aMessage = $oFolder->getMessages('ALL', null, false, false);
找到包含消息的文件夹
$oFolder = $aMessage->getContainingFolder();
文档
Client::class
Message::class
Folder::class
Attachment::class
MessageCollection::class
扩展 Illuminate\Support\Collection::class
AttachmentCollection::class
扩展 Illuminate\Support\Collection::class
FolderCollection::class
扩展 Illuminate\Support\Collection::class
已知问题
里程碑与即将到来的功能
- Wiki!!
变更日志
请参阅CHANGELOG 了解最近的变化信息。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件vasimseta786@gmail.com联系,而不是使用问题跟踪器。
致谢
- [Vasim][link-author]
- [所有贡献者][link-contributors]
支持者
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可文件。