Laravel-电子邮件排队不起作用

时间:2018-06-21 10:22:22

标签: php laravel laravel-queue laravel-jobs

我有一个可以发送几封电子邮件的应用程序,有时会返回超时错误。因此,我认为解决方案是在队列中后台发送电子邮件,但实现起来却遇到问题。

例如,在我的控制器中,它可以工作:

$data = array(
            'name' => $tecnic->name,
            'email' => $tecnic->email,
            'code' => $code
          );
Mail::send('email-to-tecnico', $data, function($message) use ($data)
        {
          $message->from('no-reply@domain.pt' , 'Title');
          $message->to($data['email'], $data['name'])->subject('subject');

        });

接下来,我创建一个Job SendStartPatEmail并添加以下内容:

use Mail;
class SendStartPatEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(Mailer $mailer)
    {
      Mail::send('email-to-tecnico', $data, function($message) use ($data)
      {
        $message->from('no-reply@domain.pt' , 'Title');

        $message->to($data['email'], $data['name'])->subject('Subject');

      });
    }
}

然后在控制器中删除Mail :: send并添加以下内容:

SendStartPatEmail::dispatch($data);

运行此作业时,该作业是在作业表中创建的,但不发送电子邮件,并且“尝试次数”列为0。

这不会返回任何错误。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

要在作业表中运行排队的作业,您需要运行php artisan queue:work

我建议阅读有关主管的文档,以确保工作人员始终在需要的项目上运行:

Laravel Supervisor Configuration