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 相关文章推荐
PHP中调用JAVA
Oct 09 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 PHP
PHP 危险函数全解析
Sep 09 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
PHP实现变色验证码实例
Jan 06 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php析构函数的简单使用说明
Aug 24 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 PHP
php无限极分类实现方法分析
Jul 04 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 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
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
jquery 插件 人性化的消息显示
2008/01/21 Javascript
ext form 表单提交数据的方法小结
2008/08/08 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
python 字典操作提取key,value的方法
2019/06/26 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
C++:局部变量能否和全局变量重名
2014/03/03 面试题
应聘医学检验人员自荐信
2013/09/27 职场文书
还款承诺书范文
2014/05/20 职场文书
商业街策划方案
2014/05/31 职场文书
新书发布会策划方案
2014/06/09 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技