laravel 定时任务通过队列发送邮件[通俗易懂]

laravel 定时任务通过队列发送邮件

大家好,又见面了,我是全栈君。

 

关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看。

1.用database队列驱动,生成创建这些表的迁移

php artisan queue:table
php artisan migrate

用redis 队列驱动需要在配置文件 config/database.php 中配置 Redis 数据库连接

2.生成任务类

php artisan make:job SendToStarterMail

生成之后,在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\Log;

class SendToStarterMail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $email;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($email)
    {
        $this->email = $email;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($useremail)->send(new StarterMail($user))//StarterMail为第3步创建的邮件类
        ->cc($moreUsers)
        ->bcc($evenMoreUsers); 

    }
}

 

3.创定时任务指令

php artisan make:command SendStarterEmail

就会在app/Console/Commands下生成一个SendStarterEmail.php文件,进入这个文件,自定义指令名:

protected $signature = 'starter:email';

添加描述

protected $description = '创业者邀约邮件';

handle方法里写逻辑

 /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //业务逻辑
        $job = (new SendToStarterMail($email))->onConnection('database')->onQueue('emails');//SendToStarterMail为第二步生成的任务类
        dispatch($job);//分发任务到队列
    }

 

4.设置定时时间

在app/Console/Kernel.php的schedule方法里添加:

protected function schedule(Schedule $schedule)
{
     $schedule->command('starter:email')->dailyAt('12:00');
}

本地测试时,为方便测试,将执行时间改为everyMinute()运行,正式环境上线时再改回来!

5.运行队列监听服务

php artisan queue:work database --queue=emails #database为对接驱动,emails为队列名称,可自定义

正式环境请配置在supervisor里,请参考我的另外一篇文章:supervisor 从安装到使用

6.正式环境将以下添加如crontab中

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

测试环境,可运行以下代替:

php artisan schedule:run

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111733.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JS验证身份证的合法性[通俗易懂]

    JS验证身份证的合法性

    2022年1月20日
    48
  • IDEA2019.2.4从安装到卸载

    IDEA最近不知怎么了,更新后各种问题。从2019.2.X开始就各种问题,最近出新版本了,然后下载尝试了下,发现maven依然很多问题。最终只能重新安装旧版(2019.1.4)。新版本表现的症状有,maven无提醒,CPU占用率高…

    2022年3月13日
    55
  • excel转json操作

    excel转json操作工作中需要用到将从数据库中下载的excel每行数据转成json文件,用于规则回溯,参考网上资料,通过以下代码可实现:importpandasaspdimportnumpyasnpimportjsonimportdatetime#导入数据#由于phone2有缺失值,如果不加converters={‘phone2’:str},导致读入会变成float形式,导致有值的手机号码后会加点0,如13812341234.0data=pd.read_excel(r’C:\Users\

    2022年6月12日
    37
  • QTcpSocket学习

    QTcpSocket学习一、涉及到的函数监听:tcpServer->listen(QHostAddress::LocalHost,6666)错误信息:tcpServer->errorString()新连接信号:connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage()))设置输出流:QByteArrayblock…

    2025年9月2日
    5
  • BT 种子 tracker 磁链

    BT 种子 tracker 磁链传统的种子和磁链的区别主要参考:https://www.quora.com/Whats-the-difference-between-magnet-links-and-regular-torrent-files-on-tracker-siteshttps://www.zhihu.com/question/36151980(很多回答,但是都没有说清楚)在使用迅雷时,磁链会先下载一个…

    2022年4月29日
    97
  • k8s资源分类机制_k8s资源分类机制

    k8s资源分类机制_k8s资源分类机制(第三章)资源管理yaml语言介绍资源管理方式介绍方式1:命令式对象管理方式2:命令式对象配置方式3:声明式对象配置配置方式总结kubectl在node节点上执行资源管理本章节主要介绍yaml语法和kubernetes的资源管理方式学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4JFixu6-1651391374869)(en-resour

    2022年8月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号