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

举报
lxw1844912514 发表于 2022/03/27 01:00:31 2022/03/27
【摘要】 关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看。 1.用database队列驱动,生成创建这些表的迁移 php artisan queue:tablephp artisan migrate 用redis 队列...

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

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


     
  1. php artisan queue:table
  2. php artisan migrate

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

2.生成任务类

php artisan make:job SendToStarterMail

    

生成之后,在handle方法中处理发送邮件


     
  1. <?php
  2. namespace App\Jobs;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Queue\SerializesModels;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Support\Facades\Log;
  9. class SendToStarterMail implements ShouldQueue
  10. {
  11. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  12. protected $email;
  13. /**
  14. * Create a new job instance.
  15. *
  16. * @return void
  17. */
  18. public function __construct($email)
  19. {
  20. $this->email = $email;
  21. }
  22. /**
  23. * Execute the job.
  24. *
  25. * @return void
  26. */
  27. public function handle()
  28. {
  29. Mail::to($useremail)->send(new StarterMail($user))//StarterMail为第3步创建的邮件类
  30. ->cc($moreUsers)
  31. ->bcc($evenMoreUsers);
  32. }
  33. }

3.创定时任务指令

php artisan make:command SendStarterEmail

    

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

protected $signature = 'starter:email';

    

添加描述

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

    

handle方法里写逻辑


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

4.设置定时时间

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


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

本地测试时,为方便测试,将执行时间改为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

    

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100028940

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。