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生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
PHP中的float类型使用说明
Jul 27 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
PHP正则表达式笔记与实例详解
May 09 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
大师制作的中短波矿石收音机
2020/04/02 无线电
php 三维饼图的实现代码
2008/09/28 PHP
PHP 组件化编程技巧
2009/06/06 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php构造函数与析构函数
2016/04/23 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
.NET程序员的几道面试题
2012/06/01 面试题
应聘面试自我评价
2014/01/24 职场文书
中年人生感言
2014/02/04 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android