laravel5.6 框架邮件队列database驱动简单demo示例


Posted in PHP onJanuary 26, 2020

本文实例讲述了laravel5.6 框架邮件队列database驱动。分享给大家供大家参考,具体如下:

一: 邮件初始参数配置

配置 .env  (demo示例是163邮箱,开启POP3和SMTP服务,获取授权密码)

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'驱动)

QUEUE_DRIVER=database

二: 数据库建表

//队列任务表
php artisan queue:table
//任务执行失败表
php artisan queue:failed-table
//执行数据库迁移
php artisan migrate

三: 生成任务类

php artisan make:job SendEmail

生成之后,在handle方法中处理发送队列邮件

<?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('发送失败');
    }
  }
}

四: 对应邮件发送的控制器,任务加到队列中

<?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']));
    }
  }
}

五:  执行队列里的任务

//默认只执行一次队列请求,当请求执行完成后就终止
php artisan queue:work
//监听队列请求,只要运行着,就能一直接受请求,除非手动终止
php artisan queue:listen

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Mysql的常用命令
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
Yii框架实现多数据库配置和操作的方法
May 25 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 #PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 #PHP
Laravel框架自定义分页样式操作示例
Jan 26 #PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
Jan 26 #PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 #PHP
yii2.0框架场景的简单使用示例
Jan 25 #PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 #PHP
You might like
检测png图片是否完整的php代码
2010/09/06 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
以下的初始化有什么区别
2013/12/16 面试题
小学一年级学生评语
2014/04/22 职场文书
设计大赛策划方案
2014/06/13 职场文书
服务理念标语
2014/06/18 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python