Laravel中利用队列发送邮件的方法示例

https://www.jb51.net/article/121647.htm

本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间。下面讲解下Laravel中队列的使用

1、配置文件 config/queue.php

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<?php

return [

 ‘default‘ => env(‘QUEUE_DRIVER‘, ‘sync‘),

 ‘connections‘ => [

 ‘sync‘ => [

  ‘driver‘ => ‘sync‘,

 ],

 ‘database‘ => [

  ‘driver‘ => ‘database‘,

  ‘table‘ => ‘jobs‘,

  ‘queue‘ => ‘default‘,

  ‘retry_after‘ => 90,

 ],

 ‘beanstalkd‘ => [

  ‘driver‘ => ‘beanstalkd‘,

  ‘host‘ => ‘localhost‘,

  ‘queue‘ => ‘default‘,

  ‘retry_after‘ => 90,

 ],

 ‘sqs‘ => [

  ‘driver‘ => ‘sqs‘,

  ‘key‘ => ‘your-public-key‘,

  ‘secret‘ => ‘your-secret-key‘,

  ‘prefix‘ => https://sqs.us-east-1.amazonaws.com/your-account-id,

  ‘queue‘ => ‘your-queue-name‘,

  ‘region‘ => ‘us-east-1‘,

 ],

 ‘redis‘ => [

  ‘driver‘ => ‘redis‘,

  ‘connection‘ => ‘default‘,

  ‘queue‘ => ‘default‘,

  ‘retry_after‘ => 90,

 ],

 ],

 ‘failed‘ => [

 ‘database‘ => env(‘DB_CONNECTION‘, ‘mysql‘),

 ‘table‘ => ‘failed_jobs‘,

 ],

];

配置文件默认使用的是同步驱动sync,每一种队列驱动的配置都可以在该文件中找到, 包括数据库, Beanstalkd, Amazon
SQS, Redis。 其中还包含了一个null队列驱动用于那些放弃队列的任务。failed配置项用于配置失败队列任务存放的数据库及数据表。
接下来我们需要创建一个队列任务类。具体配置可以参考文档 队列驱动配置

2、创建队列任务类,之后会在app/Jobs目录下生成一个SendEmail.php的文件

?


1

php artisan make:job SendEmail

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

<?php

namespace App\Jobs;

use App\User;

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;

 protected $user;

 /**

 * Create a new job instance.

 *

 * @return void

 */

 public function __construct(User $user)

 {

 $this->user = $user;

 }

 /**

 * 执行队列的方法 比如发送邮件

 *

 * @return void

 */

 public function handle()

 {

 $user = $this->user;

 

 Mail::raw(‘这里填写邮件的内容‘,function ($message){

  // 发件人(你自己的邮箱和名称)

  $message->from(‘[email protected]‘, ‘yourname‘);

  // 收件人的邮箱地址

  $message->to($this->user);

  // 邮件主题

  $message->subject(‘队列发送邮件‘);

 });

 }

}

任务类创建完之后到控制器 把数据加入到队列

3、创建发送消息的控制器 使用dispatch方法手动分发任务,方法里传一个任务类的实例

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

namespace App\Http\Controllers;

use App\Jobs\SendEmail;

use App\User;

class MessageController extends Controller

{

 public function index()

 {

 $user = User::find(1);

 $this->dispatch(new SendEmail($user));

 }

}

4、然后访问浏览器,运行项目把任务推送到队列中。然后使用Artisan命令,执行队列里的任务

php artisan queue:

  • queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;
  • queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止;
  • queue:work --daemon同listen一样,不同的是work不需要再次加载框架,直接运行任务,一般推荐使用这个来处理队列监听。

注:使用 queue:work --daemon ,当更新代码的时候,需要停止,然后重新启动,这样才能把修改的代码应用上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

原文地址:https://www.cnblogs.com/lxwphp/p/9522853.html

时间: 2024-10-31 12:50:53

Laravel中利用队列发送邮件的方法示例的相关文章

linux利用sendmail发送邮件的方法

linux利用sendmail发送邮件, 方法1 安装sendmail即可使用, mail -s "test" [email protected] <content.txt bin/mail会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,配置非常麻烦,而且会带来不必要的资源占用. 方法2.利用外部的smpt服务器 而通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail而用外部的smtp服务器发送邮件的目的: 修改

利用MySQL统计一列中不同值的数量方法示例

前言 本文实现的这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来.表结构如下所示- 其中 origin 是用户来源,其中的值有 iPhone .Android .Web 三种,现在需要分别统计由这三种渠道注册的用户数量. 解决方案1 ? 1 2 3 4 5 6 7 8 9 SELECT count(*) FROM user_operation_log WHERE origin = 'iPhone'; SELECT count(*) FROM user_ope

laravel中redis队列的使用

一.配置文件 首先我们需要在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php: return [ 'default' => env('QUEUE_DRIVER', 'sync'), 'connections' => [ 'sync' => [ 'driver' => 'sync', ], 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' =&g

如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)

Laravel 4 和 Laravel 5 的邮件发送使用方式完全一致.Laravel 5 的邮件发送中文文档在:http://laravel-china.org/docs/5.0/mail 本文中,我将以 163 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件. 配置修改邮件发送配置.4.2 在 app/config/mail.php,5 在 config/mail.php,修改以下配置: 'host' => 'smtp.163.com','port' => 25,'fro

Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO

我们知道,Laravel 自带的分页器方法包含 simplePaginate 和 paginate 方法,一个返回不带页码的分页链接,另一个返回带页码的分页链接,但是这两种分页链接页码都是以带问号的动态参数形式附加在查询字符串中,形如 https://laravelacademy.org?page=100,但是这种包含动态参数的 URL 格式对 SEO 不友好,我们最好将其转化为 https://laravelacademy.org/page/100 这种不带问号的伪静态分页链接格式,遗憾的是

在Asp.Net中使用SmtpMail发送邮件的方法

在ASP中,就可以通过调用CDONTS组件发送简单邮件,在ASP.Net中,自然也可以.不同的是,.Net Framework中,将这一组件封装到了System.Web.Mail命名空间中. 一个典型的邮件发送程序如下:<%@ Import Namespace="System.Web.Mail" %><script runat="server">MailMessage mail=new MailMessage(); mail.From=&qu

在Yii Framework中利用PHPMailer发送邮件(2011-06-02 14:06:23)

转载▼ 标签: it 分类: 技术共享 官方扩展链接:http://www.yiiframework.com/extension/mailer/这个扩展配置十分方便,如果有问题的话,可以打开Debug: <?php $message = 'Hello World!'; $mailer = Yii::createComponent('application.extensions.mailer.EMailer'); $mailer->Host = <your smtp host>; $

laravel中delete()方法和destroy()方法的区别

delete()方法是实例方法,需要查询到相应的数据并通过模型实例调用 destroy()方法可以直接调用,通过索引删除记录 举个栗子: 1 /*delete()方法删除*/ 2 //先查找记录 3 $blog = Blog::find(1); 4 if($blog){ 5 //再删除记录 6 if($blog->delete()){ 7 echo "删除成功!"; 8 }else{ 9 echo '删除失败!'; 10 } 11 }else{ 12 echo "文章不

laravel中redis个方法的使用

在laravel中使用redis自带方法的时候会发现许多原生的方法都不存在了,laravel对其进行了重新的封装但是在文档中并没有找到相关的资料最后在 \vendor\predis\predis\src\Profile\RedisProfile.php 该文件的createCommand方法重打印出 $this->commands 发现许多方法名是被重写的,以下为所有重新定义的方法名 array(151) { ["EXISTS"]=> string(24) "Pr