vasim-seta/codeigniter-imap

CodeIgniter IMAP客户端

0.1.2 2022-05-17 08:56 UTC

This package is auto-updated.

Last update: 2024-09-17 14:11:41 UTC


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,但由于一些错误,我无法使用它,而且我没有太多时间来解决这个问题。我从未创建过任何库,我对许可也不太了解,所以如果有任何关于许可或任何其他问题的疑问,请告诉我,我将从这里删除它。

目录

安装

  1. 如果尚未安装,请安装php-imap库
sudo apt-get install php*-imap && sudo apache2ctl graceful

您可能还想检查phpinfo()以确认扩展已启用。

  1. 现在,通过运行以下命令安装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 — 使用SSL
  • tls — 使用TLS

详细的[application/config/config.php]配置

  • host — imap主机
  • port — imap端口
  • encryption — 所需的加密方法
  • validate_cert — 决定你是否想要验证证书
  • username — imap账户用户名
  • password — imap账户密码
  • imap.options — 额外的检索选项
    • delimiter — 您可以使用任何受支持的字符,如"."、"/"等
    • fetchFT_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 — 匹配尚未阅读的消息

更多信息

通过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)。有关更多信息,请参阅许可文件