bapcltd / php-imap
管理邮箱,过滤/获取/删除PHP中的电子邮件(支持IMAP/POP3/NNTP)
v0.6.1
2020-02-11 15:26 UTC
Requires
- php: ^7.4
- ext-fileinfo: *
- ext-iconv: *
- ext-imap: *
- ext-mbstring: *
- paragonie/hidden-string: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- jakub-onderka/php-parallel-lint: ^1.0
- maglnet/composer-require-checker: ^2.0
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^8.5
- povils/phpmnd: ^2.2
- psalm/plugin-phpunit: ^0.8.1
- roave/security-advisories: dev-master
- sebastian/phpcpd: ^4.1
- signpostmarv/php-cs-fixer-config: ^0.16.3
- vimeo/psalm: ^3.8
Suggests
- ext-fileinfo: To facilitate IncomingMailAttachment::getMimeType() auto-detection
Conflicts
- php-imap/php-imap: *
- vimeo/psalm: <3.8.3
This package is auto-updated.
Last update: 2024-09-27 17:51:50 UTC
README
最初于2012年12月发布,PHP IMAP邮箱是一个功能强大且开源的库,可以通过PHP IMAP扩展连接到邮箱(支持POP3、IMAP和NNTP)。此库允许您从电子邮件服务器获取电子邮件。扩展功能或创建强大的Web应用程序来处理您的收件箱。
于2020年分支,查看原始版本。
功能
- 通过PHP IMAP扩展连接到邮箱(POP3/IMAP/NNTP)
- 获取带附件和内联图像的电子邮件
- 根据自定义标准过滤或排序电子邮件
- 标记电子邮件为已读/未读
- 删除电子邮件
- 管理邮箱文件夹
要求
- PHP 7.4
- PHP必须存在
fileinfo
扩展;请确保在您的php.ini中此行是激活的:extension=php_fileinfo.dll
- PHP必须存在
iconv
扩展;请确保在您的php.ini中此行是激活的:extension=php_iconv.dll
- PHP必须存在
imap
扩展;请确保在您的php.ini中此行是激活的:extension=php_imap.dll
- PHP必须存在
mbstring
扩展;请确保在您的php.ini中此行是激活的:extension=php_mbstring.dll
通过Composer安装
从master
安装最新和可能不稳定的源代码,这可能尚未经过适当测试
$ composer require bapcltd/php-imap:dev-master
运行测试
在运行任何测试之前,您可能需要运行composer install
来安装所有(开发)依赖项。
运行所有测试
您可以通过运行以下命令(在已安装的php-imap
目录内)来运行所有可用的测试:composer run tests
仅运行PHPUnit测试
您可以通过运行以下命令(在已安装的php-imap
目录内)来运行所有PHPUnit测试:php vendor/bin/phpunit --testdox
入门示例
下面,您将找到一个示例代码,说明如何使用此库。有关更多信息和其他示例,您可以查看wiki。
// Create PhpImap\Mailbox instance for all further actions $mailbox = new PhpImap\Mailbox( '{imap.gmail.com:993/imap/ssl}INBOX', // IMAP server and mailbox folder 'some@gmail.com', // Username for the before configured mailbox '*********', // Password for the before configured username __DIR__, // Directory, where attachments will be saved (optional) 'UTF-8' // Server encoding (optional) ); // set some connection arguments (if appropriate) $mailbox->setConnectionArgs( CL_EXPUNGE // expunge deleted mails upon mailbox close | OP_SECURE // don't do non-secure authentication ); try { // Get all emails (messages) // PHP.net imap_search criteria: https://php.ac.cn/manual/en/function.imap-search.php $mailsIds = $mailbox->searchMailbox('ALL'); } catch(PhpImap\Exceptions\ConnectionException $ex) { echo "IMAP connection failed: " . $ex; die(); } // If $mailsIds is empty, no emails could be found if(!$mailsIds) { die('Mailbox is empty'); } // Get the first message // If '__DIR__' was defined in the first line, it will automatically // save all attachments to the specified directory $mail = $mailbox->getMail($mailsIds[0]); // Show, if $mail has one or more attachments echo "\nMail has attachments? "; if($mail->hasAttachments()) { echo "Yes\n"; } else { echo "No\n"; } // Print all information of $mail print_r($mail); // Print all attachements of $mail echo "\n\nAttachments:\n"; print_r($mail->getAttachments());
方法imap()允许在实例的上下文中调用任何imap函数
// Call imap_check(); // https://php.ac.cn/manual/en/function.imap-check.php $info = $mailbox->imap('check'); // // Show current time for the mailbox $currentServerTime = isset($info->Date) && $info->Date ? date('Y-m-d H:i:s', strtotime($info->Date)) : 'Unknown'; echo $currentServerTime;
一些请求需要大量时间和资源
// If you don't need to grab attachments you can significantly increase performance of your application $mailbox->setAttachmentsIgnore(true); // get the list of folders/mailboxes $folders = $mailbox->getMailboxes('*'); // loop through mailboxs foreach($folders as $folder) { // switch to particular mailbox $mailbox->switchMailbox($folder['fullpath']); // search in particular mailbox $mails_ids[$folder['fullpath']] = $mailbox->searchMailbox('SINCE "1 Jan 2018" BEFORE "28 Jan 2018"'); } print_r($mails_ids);