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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java取整函数的使用

    在开发中,取整操作使用是很普遍的,所以Java在java.lang.Math类中添加了数字取整方法。在java.lang.Math类中主要包括以下几种取整方法。方法 说明 publicstaticdoubleceil(doublea) 返回大于等于参数的最小整数。 publicstaticdoublefloor(doublea) 返回小于等于参…

    2022年4月8日
    47
  • linux异步io底层原理,异步IO简析

    linux异步io底层原理,异步IO简析什么是异步 IO UNIX 网络编程卷 1 中的 IO 多路复章节总结了几种典型 IO 模型 包括 阻塞 IO 非阻塞 IOIO 复用信号驱动式 IO 异步 IO 这些 IO 模型在本质上都是围绕着同步 异步 阻塞 非阻塞这几个特点在做一些不同的选择 IO 的过程是应用程序从某个设备读取数据 或者往设备写入数据 操作系统把这些设备抽象为描述符 fd 应用程序则在这些 fd 上面进行读写操作 由于 fd 的底层是设备 这里就会有个问题 设备还没

    2025年12月12日
    2
  • css如何设置超链接样式

    css如何设置超链接样式css设置超链接样式是通过伪类来实现的 (1):link:设置a对象在未被访问前的样式表属性。(2):visited:设置a对象在其链接地址已被访问过时的样式表属性。(3):hover:设置对象在其鼠标悬停时的样式表属性。(4):active:设置对象在被用户激活(在鼠标点击与释放之间发生的事件)时的样式表属性。  css中关于超链接的四个属性正确顺序为:

    2022年7月19日
    24
  • 开源项目之架构分享[通俗易懂]

    开源项目之架构分享[通俗易懂]此次分享是我当初在开发某个系统时,参考的一些开源项目架构的思路和风格。第一个是Jeesite,它的架构风格如下:大家如果对jeesite感兴趣的话,可以百度搜索找到,不过那已经是半年多以前的事情,jeesite目前也发生较大的变化。当初我在参考jessite这个思路时,不知道是什么原因使我没有加入module,其实从现在的角度出发,加上module也是一件不错的事情,modu…

    2022年7月28日
    6
  • cod单页系统 wordpress 来搭建 外贸 单面系统

    cod单页系统 wordpress 来搭建 外贸 单面系统可私聊模板

    2025年11月8日
    2
  • 一文吃透 VS Code+Git 操作(vs code中git的相关配置与使用)

    一文吃透 VS Code+Git 操作(vs code中git的相关配置与使用)vscode结合git的相关操作详解,案例演示。

    2022年8月22日
    19

发表回复

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

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