繁体   English   中英

Laravel 5.3提交数据后邮件未发送到队列作业

[英]Laravel 5.3 Mail not sending to queue job after submit data

我已经尝试解决几天的队列邮件,但是仍然找不到解决方案。 请看看我的控制器,工作,邮件

调节器

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Contact;
use App\Jobs\SendEmail;

class MailController extends Controller
{
public function getContact(){
    return view ('mail');
}

public function postContact(Request $request){

        $contact = new Contact;
        $contact->email = $request['email'];
        $contact->name = $request['name'];
        $contact->subject = $request['subject'];
        $contact->save(); 

        dispatch(new SendEmail($contact));
        return back();
}
}

工作

<?php
namespace App\Jobs;
use App\Contact;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Mail\Mailer;
Use App\Mail\EmailContact;

class SendEmail implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;

public $contact;

public function __construct(Contact $contact)
{
    $this->contact = $contact;
}

public function handle(Mailer $mailer)
{
    $email = new EmailContact($this->contact);
    $mailer->to($this->contact->email)->send($email);
}
}

邮件

<?php
namespace App\Mail;
use App\Contact;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class EmailContact extends Mailable
{
use Queueable, SerializesModels;

public $contact;
public function __construct(Contact $contact)
{
    $this->contact = $contact;
}

public function build()
{
    return $this->view('emails.contact')->with([
        'email' => $this->contact->email,
        'name' => $this->contact->name,
        'subject' => $this->contact->subject,
    ]);
}
}

之后,我添加php artisan queue:work但结果仍然与使用SEND相同。 我的编码有什么问题吗?

在您的可ShouldQueue类中实现ShouldQueue

use Illuminate\Contracts\Queue\ShouldQueue;

class EmailContact extends Mailable implements ShouldQueue

还要验证您的队列驱动程序。 默认情况下,laravel将队列驱动程序设置为sync 这意味着任何队列作业都将像普通代码一样运行,即使您尝试将其排队。 您需要首先实现一个队列才能使其工作。 尝试数据库或Redis队列。

QUEUE_DRIVER=sync

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM