当前位置:首页 > CMS教程 > 其它CMS > 列表

laravel5.6 框架邮件队列database驱动简单demo示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-08 09:08:59 浏览: 评论:0 

本文实例讲述了laravel5.6 框架邮件队列database驱动,分享给大家供大家参考,具体如下:

一: 邮件初始参数配置

配置 .env  (demo示例是163邮箱,开启POP3和SMTP服务,获取授权密码)

  1. MAIL_DRIVER=smtp 
  2. MAIL_HOST=smtp.163.com 
  3. MAIL_PORT=465 
  4. MAIL_USERNAME=你的163邮箱地址 
  5. MAIL_PASSWORD=你的163邮箱地址对应的授权密码(不是登录密码) 
  6. MAIL_ENCRYPTION=ssl 
  7. MAIL_FROM_ADDRESS=你的163邮箱地址 

修改 .env 中的 QUEUE_DRIVER 值   (配置文件 config/queue.php  默认是同步'sync', demo配置'database'驱动)

QUEUE_DRIVER=database

二: 数据库建表

  1. //队列任务表 
  2. php artisan queue:table 
  3. //任务执行失败表 
  4. php artisan queue:failed-table 
  5. //执行数据库迁移 
  6. php artisan migrate 

三: 生成任务类

php artisan make:job SendEmail

生成之后,在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\Mail; 
  9. class SendEmail implements ShouldQueue 
  10.   use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 
  11.   private $email
  12.   private $content
  13.   private $subject
  14.   /** 
  15.    * Create a new job instance. 
  16.    * 
  17.    * @return void 
  18.    */ 
  19.   public function __construct( $email$content$subject
  20.   { 
  21.     $this->email = $email
  22.     $this->content = $content
  23.     $this->subject = $subject
  24.   } 
  25.   /** 
  26.    * Execute the job. 
  27.    * 
  28.    * @return void 
  29.    */ 
  30.   public function handle() 
  31.   { 
  32.     $email = $this->email; 
  33.     $subject = $this->subject; 
  34.     Mail::send( 
  35.       'admin.emails.test'
  36.       ['content' => $this->content], 
  37.       function ($messageuse($email$subject) { 
  38.         $message->to($email)->subject($subject); 
  39.       } 
  40.     ); 
  41.     // Mail::failures() 返回的错误邮件信息,判断是否发送成功. (无错误信息,返回空数组) 
  42.     if(emptyempty(Mail::failures())){ 
  43.       dd('发送成功'); 
  44.     }else
  45.       dd('发送失败'); 
  46.     } 
  47.   } 

四: 对应邮件发送的控制器,任务加到队列中

  1. <?php 
  2. namespace App\Http\Controllers\Admin; 
  3. use App\Http\Controllers\Controller; 
  4. use App\Jobs\SendEmail; 
  5. /** 
  6.  * Description of BookedController 
  7.  */ 
  8. class BookedController extends Controller { 
  9.   public function queueSend() 
  10.   { 
  11.     //邮件发送demo数据 
  12.     $data =[ 
  13.       0=>[ 
  14.         'email'=>'XXXXXX@qq.com'
  15.         'content'=>'Hello World One'
  16.         'subject'=>'测试标题一'
  17.       ], 
  18.       1=>[ 
  19.         'email'=>'XXXXXX@qq.com'
  20.         'content'=>'Hello World Two'
  21.         'subject'=>'测试标题二'
  22.       ] 
  23.     ]; 
  24.     foreach ($data as $item){ 
  25.       //数据循环,插入表jobs中,队列初始化数据 
  26.       dispatch(new SendEmail($item['email'],$item['content'],$item['subject'])); 
  27.     } 
  28.   } 

五:  执行队列里的任务

  1. //默认只执行一次队列请求,当请求执行完成后就终止 
  2. php artisan queue:work 
  3. //监听队列请求,只要运行着,就能一直接受请求,除非手动终止 
  4. php artisan queue:listen

Tags: laravel5.6邮件队列 database

分享到: