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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
PHP strtotime函数详解
Dec 18 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
PHP与SQL语句常用大全
Dec 10 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
php中的buffer缓冲区用法分析
May 31 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
linux实现php定时执行cron任务详解
2013/12/24 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python中去空格函数的用法
2014/08/21 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
python如何将图片转换为字符图片
2020/08/19 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Python random模块的使用示例
2020/10/10 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
优秀党员获奖感言
2014/02/18 职场文书
21岁生日感言
2014/02/27 职场文书
个人优缺点总结
2015/02/28 职场文书
学术会议通知
2015/04/15 职场文书
高一英语教学反思
2016/03/03 职场文书