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之Smarty入门
Jan 04 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
解析php dirname()与__FILE__常量的应用
Jun 24 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
PHP7 其他语言层面的修改
Mar 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
PHPLog php 程序调试追踪工具
2009/09/09 PHP
请离开include_once和require_once
2013/07/18 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
php表单提交实例讲解
2015/11/12 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
Vue实现日历小插件
2019/06/26 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
python线程锁(thread)学习示例
2013/12/04 Python
Python中的self用法详解
2019/08/06 Python
python实现名片管理器的示例代码
2019/12/17 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python实现移动木板小游戏
2020/10/09 Python
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
水果连锁超市创业计划书
2014/01/24 职场文书
学习经验交流会主持词
2014/04/01 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
小学运动会报道稿
2014/10/04 职场文书
西柏坡导游词
2015/02/05 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis