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之第三天
Oct 09 PHP
用PHP+java实现自动新闻滚动窗口
Oct 09 PHP
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
深入php var_dump()函数的详解
Jun 05 PHP
探讨如何把session存入数据库
Jun 07 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
php文件上传类的分享
Jul 06 PHP
七种PHP开发环境搭建工具
Jun 28 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的文件操作与算法实现的面试题示例
2015/08/10 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
vue a标签点击实现赋值方式
2020/09/07 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Python面向对象进阶学习
2019/05/21 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
Python如何用filter函数筛选数据
2020/03/05 Python
python设置中文界面实例方法
2020/10/27 Python
中国制造网:Made-in-China.com
2019/10/25 全球购物
班组长的岗位职责
2013/12/09 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
个性婚礼策划方案
2014/05/17 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
电影复兴之路观后感
2015/06/02 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android