2017-05-20 28 views
0

我一直試圖解決郵件隊列郵件幾天,但仍然找不到解決方案。 請大家看我的控制器,工作,郵件Laravel 5.3提交數據後郵件未發送至隊列作業

控制器

<?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的工匠隊列:工作 但結果仍然與使用SEND相同。 我的編碼有問題嗎?

回答

0

在你的郵寄課程中實施ShouldQueue

use Illuminate\Contracts\Queue\ShouldQueue; 

class EmailContact extends Mailable implements ShouldQueue 

也驗證您的隊列驅動程序。默認情況下,laravel將隊列驅動程序設置爲sync。這意味着任何隊列作業都將像普通代碼一樣運行,即使您嘗試將其排隊。你需要首先實現一個隊列才能工作。嘗試數據庫或redis隊列。

QUEUE_DRIVER=sync

+1

嗨,謝謝,我終於解決了這個問題。在我的.env文件中,我的QUEUE_DRIVER =數據庫。我檢查dd(config('queue.default'));它的輸出仍然是同步的。所以我清除緩存的PHP工匠配置:清除,最後它的作品!我真的需要在我的郵寄課程中實施ShouldQueue。因爲沒有實現它,它仍然可以工作 –

+0

你好,我注意到你已經在你的工作類中實現了'ShouldQueue'。因此,它應該在您發送作業而不是直接發送郵件時工作。但是您甚至可以直接從您的控制器調用郵件,在這些情況下您可能需要實施它。 – Sandeesh

相關問題