本文实例讲述了laravel5.6 框架邮件队列database驱动。分享给大家供大家参考,具体如下:
一: 邮件初始参数配置
配置 .env (demo示例是163邮箱,开启POP3和SMTP服务,获取授权密码)
1
2
3
4
5
6
7
|
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=你的163邮箱地址
MAIL_PASSWORD=你的163邮箱地址对应的授权密码(不是登录密码)
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的163邮箱地址
|
修改 .env 中的 QUEUE_DRIVER 值 (配置文件 config/queue.php 默认是同步'sync', demo配置'database'驱动)
1
|
QUEUE_DRIVER=database
|
二: 数据库建表
1
2
3
4
5
6
|
//队列任务表
php artisan queue:table
//任务执行失败表
php artisan queue:failed-table
//执行数据库迁移
php artisan migrate
|
三: 生成任务类
1
|
php artisan make:job SendEmail
|
生成之后,在handle方法中处理发送队列邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
class SendEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $email ;
private $content ;
private $subject ;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct( $email , $content , $subject )
{
$this ->email = $email ;
$this ->content = $content ;
$this ->subject = $subject ;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$email = $this ->email;
$subject = $this ->subject;
Mail::send(
'admin.emails.test' ,
[ 'content' => $this ->content],
function ( $message ) use ( $email , $subject ) {
$message ->to( $email )->subject( $subject );
}
);
// Mail::failures() 返回的错误邮件信息,判断是否发送成功. (无错误信息,返回空数组)
if ( empty (Mail::failures())){
dd( '发送成功' );
} else {
dd( '发送失败' );
}
}
}
|
四: 对应邮件发送的控制器,任务加到队列中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Jobs\SendEmail;
/**
* Description of BookedController
*/
class BookedController extends Controller {
public function queueSend()
{
//邮件发送demo数据
$data =[
0=>[
'email' => 'XXXXXX@qq.com' ,
'content' => 'Hello World One' ,
'subject' => '测试标题一' ,
],
1=>[
'email' => 'XXXXXX@qq.com' ,
'content' => 'Hello World Two' ,
'subject' => '测试标题二' ,
]
];
foreach ( $data as $item ){
//数据循环,插入表jobs中,队列初始化数据
dispatch( new SendEmail( $item [ 'email' ], $item [ 'content' ], $item [ 'subject' ]));
}
}
}
|
五: 执行队列里的任务
1
2
3
4
|
//默认只执行一次队列请求,当请求执行完成后就终止
php artisan queue:work
//监听队列请求,只要运行着,就能一直接受请求,除非手动终止
php artisan queue:listen
|
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/cxx8181602/p/10177796.html