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 相关文章推荐
追求程序速度,而不是编程的速度
Apr 23 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
vue axios用法教程详解
2017/07/23 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
在Django中创建动态视图的教程
2015/07/15 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python生成requirements.txt的两种方法
2019/09/18 Python
Django框架模板用法入门教程
2019/11/04 Python
python实现视频读取和转化图片
2019/12/10 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
2014年校长工作总结
2014/12/11 职场文书
圣诞节开幕词
2015/01/29 职场文书
公司宣传语大全
2015/07/13 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
详解 TypeScript 枚举类型
2021/11/02 Javascript