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和ACCESS写聊天室(六)
Oct 09 PHP
PHP新手入门学习方法
May 08 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
php验证手机号码
Nov 11 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
TP5多入口设置实例讲解
Dec 15 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多线程下载远程多个文件
2013/06/25 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
ext for eclipse插件安装方法
2008/04/27 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python yield 使用方法浅析
2017/05/20 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
python能做什么 python的含义
2019/10/12 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
南京某公司笔试题
2013/01/27 面试题
升职自荐书范文
2013/11/28 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
教师节横幅标语
2014/10/08 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
复兴之路观后感
2015/06/02 职场文书