smartilabs / laravel-imap
Laravel IMAP 客户端
Requires
- php: >=5.5.9
- ext-fileinfo: *
- ext-iconv: *
- ext-mbstring: *
- laravel/framework: >=5.0.0
- webklex/php-imap: ^2.2
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- dev-master / 1.0.x-dev
- 1.0.5.9
- 1.0.5.8
- 1.0.5.7
- 1.0.5.6
- 1.0.5.5
- 1.0.5.4
- 1.0.5.3
- 1.0.5.2
- 1.0.5.1
- 1.0.5.0
- 1.0.4.2
- 1.0.4.1
- 1.0.4.0
- 1.0.3.11
- 1.0.3.10
- 1.0.3.9
- 1.0.3.8
- 1.0.3.7
- 1.0.3.6
- 1.0.3.5
- 1.0.3.4
- 1.0.3.3
- 1.0.3.2
- 1.0.3.1
- 1.0.3.0
- 1.0.2.12
- 1.0.2.11
- 1.0.2.10
- 1.0.2.9
- 1.0.2.8
- 1.0.2.7
- 1.0.2.6
- 1.0.2.5
- 1.0.2.4
- 1.0.2.3
- 1.0.2.2
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-08-29 05:19:16 UTC
README
描述
Laravel IMAP 是一种将原生 php-imap 模块和扩展的自定义 imap 协议集成到您的 Laravel 应用中的简单方法。这使得您的应用不仅能够响样新邮件,还可以读取和解析现有邮件以及更多功能。
如果您想在 Laravel 之外使用这个库,请访问 webklex/php-imap 以获取独立版本。
目录
文档
- 旧版本 (< v2.0.0): 旧版文档
- 核心文档: webklex/php-imap
- 维基: php-imap 维基
安装
1.) 通过运行以下命令安装 Laravel IMAP 包
composer require webklex/laravel-imap
1.1.) 如果您遇到错误或有其他问题,请按照步骤 1. - 1.1 在 此处 进行操作。
1.2.) 如果您在使用 v2.0.0 时遇到问题,请创建一个新问题,并尝试最新的 v1.6.2 版本
composer require webklex/laravel-imap:1.6.2
2.) 如果您正在使用 Laravel >= 5.5,包发现将自动配置服务提供者和 Client 别名。否则,对于 Laravel <= 5.4,编辑您的 config/app.php 文件并
- 在
providers数组中添加以下内容
Webklex\IMAP\Providers\LaravelServiceProvider::class,
- 在
aliases数组中添加以下内容
'Client' => Webklex\IMAP\Facades\Client::class,
3.) 运行以下命令发布包配置文件 config/imap.php
php artisan vendor:publish --provider="Webklex\IMAP\Providers\LaravelServiceProvider"
配置
如果您打算使用单个账户,您可能需要在您的 .env 文件中添加以下内容。
IMAP_HOST=somehost.com
IMAP_PORT=993
IMAP_ENCRYPTION=ssl
IMAP_VALIDATE_CERT=true
IMAP_USERNAME=root@example.com
IMAP_PASSWORD=secret
IMAP_DEFAULT_ACCOUNT=default
IMAP_PROTOCOL=imap
请参阅 webklex/php-imap#Configuration 和 config/imap.php 以获取所有可用配置选项的详细列表。
用法
基本用法示例
这是一个基本示例,它将输出所有 imap 文件夹中的所有邮件,并将每条消息移动到 INBOX.read。请注意,这不应该在实际生活中进行测试,只是用来展示如何工作。
/** @var \Webklex\PHPIMAP\Client $client */ $client = \Webklex\IMAP\Facades\Client::make([ 'host' => 'somehost.com', 'port' => 993, 'encryption' => 'ssl', 'validate_cert' => true, 'username' => 'username', 'password' => 'password', 'protocol' => 'imap' ]); /* Alternative by using the Facade $client = Webklex\IMAP\Facades\Client::account('default'); */ //Connect to the IMAP Server $client->connect(); //Get all Mailboxes /** @var \Webklex\PHPIMAP\Support\FolderCollection $folders */ $folders = $client->getFolders(); //Loop through every Mailbox /** @var \Webklex\PHPIMAP\Folder $folder */ foreach($folders as $folder){ //Get all Messages of the current Mailbox $folder /** @var \Webklex\PHPIMAP\Support\MessageCollection $messages */ $messages = $folder->messages()->all()->get(); /** @var \Webklex\PHPIMAP\Message $message */ foreach($messages as $message){ echo $message->getSubject().'<br />'; echo 'Attachments: '.$message->getAttachments()->count().'<br />'; echo $message->getHTMLBody(); //Move the current Message to 'INBOX.read' if($message->moveToFolder('INBOX.read') == true){ echo 'Message has ben moved'; }else{ echo 'Message could not be moved'; } } }
有关更多详细信息和其他示例,请参阅 webklex/php-imap#Table of Contents。
门面
如果您使用的是 Facade \Webklex\IMAP\Facades\Client::class,请首先在 config/imap.php 中选择一个定义的账户,然后执行 Client::connect() 以建立已验证的连接
use Webklex\IMAP\Facades\Client; /** @var \Webklex\PHPIMAP\Client $client */ $client = Client::account('default'); $client->connect();
视图示例
您可以在 /examples 下找到一些 blade 和 mask 示例。
Idle
每次收到新消息时,服务器都会通知客户端并返回新消息。
回调和 Webklex\IMAP\Events\MessageNewEvent($message) 事件在每封新邮件到来时都会被触发。
$timeout = 1200; /** @var \Webklex\PHPIMAP\Folder $folder */ $folder->idle(function($message){ /** @var \Webklex\PHPIMAP\Message $message */ dump("new message", $message->subject); }, $timeout);
oAuth
请参阅该维基文章了解gmail / google mail的设置。
基本oAuth示例
/** @var \Webklex\PHPIMAP\Client $client */ $client = \Webklex\IMAP\Facades\Client::make([ 'host' => 'somehost.com', 'port' => 993, 'encryption' => 'ssl', 'validate_cert' => true, 'username' => 'example@gmail.com', 'password' => 'ACCESS-TOKEN', 'authentication' => "oauth", 'protocol' => 'imap' ]); //Connect to the IMAP Server $client->connect();
事件
以下事件可用
Webklex\IMAP\Events\MessageNewEvent($message)—— 可以由Folder::idle触发Webklex\IMAP\Events\MessageDeletedEvent($message)—— 由Message::delete触发Webklex\IMAP\Events\MessageRestoredEvent($message)—— 由Message::restore触发Webklex\IMAP\Events\MessageMovedEvent($old_message, $new_message)—— 由Message::move触发Webklex\IMAP\Events\MessageCopiedEvent($old_message, $new_message)—— 由Message::copy触发Webklex\IMAP\Events\FlagNewEvent($flag)—— 由Message::setFlag触发Webklex\IMAP\Events\FlagDeletedEvent($flag)—— 由Message::unsetFlag触发Webklex\IMAP\Events\FolderNewEvent($folder)—— 可以由Client::createFolder触发Webklex\IMAP\Events\FolderDeletedEvent($folder)—— 由Folder::delete触发Webklex\IMAP\Events\FolderMovedEvent($old_folder, $new_folder)—— 由Folder::move触发
其他集成信息
- https://laravel.net.cn/docs/7.x/events#event-subscribers
- https://laravel.net.cn/docs/5.2/events#event-subscribers
- https://github.com/Webklex/php-imap#events
命令
假设您想在服务器后台运行imap idle进程来自动处理新消息。以下示例将展示两种主要方式来实现这一目标
事件驱动
首先,将以下内容添加到您的 app/Console/Kernel.php 文件中
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \Webklex\IMAP\Commands\ImapIdleCommand::class, ];
现在根据 laravel文档 描述注册一个事件监听器。如果您不使用默认账户,或者您想添加一些自己的魔法,您需要创建一个自定义命令(请参阅下一节)。
最后,通过以下命令测试该命令
php artisan imap:idle
自定义命令
创建一个新文件,例如 app/Console/Commands/CustomImapIdleCommand.php,并添加以下内容
<?php namespace App\Console\Commands; use Webklex\IMAP\Commands\ImapIdleCommand; use Webklex\PHPIMAP\Message; class CustomImapIdleCommand extends ImapIdleCommand { /** * The name and signature of the console command. * * @var string */ protected $signature = 'custom_command'; /** * Holds the account information * * @var string|array $account */ protected $account = "default"; /** * Callback used for the idle command and triggered for every new received message * @param Message $message */ public function onNewMessage(Message $message){ $this->info("New message received: ".$message->subject); } }
..并将以下内容添加到您的 app/Console/Kernel.php 文件中
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\CustomImapIdleCommand::class, ];
最后,通过以下命令测试该命令
php artisan custom_command
服务设置
可以通过创建以下服务文件来设置基本systemd服务
nano /etc/systemd/system/imap-idle.service
..并添加
[Unit] Description=ImapIdle After=multi-user.target After=syslog.target After=network-online.target [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/var/www/my_project ExecStart=/var/www/my_project/artisan fetch:idle Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
您现在可以通过运行以下命令来测试该服务
systemctl start imap-idle.service systemctl status imap-idle.service systemctl stop imap-idle.service systemctl restart imap-idle.service
支持
如果您遇到任何问题或发现任何错误,请不要犹豫,创建一个新的 问题。然而,请意识到可能需要一些时间才能得到回答。
关于主题、粗鲁或侮辱性的问题将不予通知删除。
如果您需要 立即 或 商业 支持,请随时通过 github@webklex.com 发送邮件。
一个小提醒
如果您在问题中编写源代码,请考虑正确格式化。这使得阅读变得更加容易,人们也更愿意评论并帮助 :)
```php
echo 'your php code...';
```
将转换为
echo 'your php code...';
功能 & pull requests
每个人都可以为此项目做出贡献。每个pull request都会被考虑,但也可能会被拒绝。为了防止不必要的劳动,如果您打算进行较大的更改,请先创建一个 功能问题。当然,如果您只是希望一个功能,您也可以创建一个新的 功能问题 ;)
已知问题
变更日志
请参阅 CHANGELOG 了解最近发生了什么更改。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 github@webklex.com 而不是使用问题跟踪器。
致谢
支持者
特别感谢JetBrains通过他们的开源许可计划支持此项目。
许可证
MIT许可(MIT)。请参阅许可文件获取更多信息。