2017-08-28 47 views
0

我一直在努力使Laravel的排隊工作幾個小時,並沒有用我不知道發生了什麼;我認爲隊列正在工作,因爲他們張貼到數據庫,但我不明白的是爲什麼他們不執行並張貼到郵件捕捉。Laravel郵件隊列不張貼到mailtrap

我已經把我的.env文件database

QUEUE_DRIVER=database

我的控制器:

$mailQueue = (new SendNotification($contact)) 
        ->delay(5); 

dispatch($mailQueue); 

我發送通知任務:

<?php 

namespace App\Jobs; 

use Illuminate\Bus\Queueable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Illuminate\Foundation\Bus\Dispatchable; 

use Mail; 
use App\Mail\Notification; 

class SendNotification implements ShouldQueue 
{ 
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 

    protected $contact; 

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

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     $notification = (new Notification($contact)); 

     Mail::to('email') 
       ->queue($notification); 
    } 
} 

最後,我可郵寄:

<?php 

namespace App\Mail; 

use Illuminate\Bus\Queueable; 
use Illuminate\Mail\Mailable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class Notification extends Mailable 
{ 
    use Queueable, SerializesModels; 


    protected $contact; 

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

    /** 
    * Build the message. 
    * 
    * @return $this 
    */ 
    public function build() 
    { 

     return $this->view('mail.notify') 
        ->with([ 
         'notifyName' => $this->request->name, 
         'notifySubject' => $this->request->subject 
        ]); 
    } 
} 

真的很基本,但我不明白爲什麼它不發送或發送到Mail陷阱;雖然我的Jobs表充滿了不會發布的隊列。

有沒有人有過這個問題?如果有的話,任何人都知道解決方案是什麼 - 我試過php artisan queue:workphp artisan queue:listen,但他們不會在終端上發佈任何內容。

更新: 我試過php artisan queue:work --queue=high, emails產量爲

Processing: App\Mail\Notification

,但它仍然沒有發送任何郵件Mailtrap。

+0

您是否檢查了日誌中的錯誤? './ storage/logs/laravel.log' – Pitchinnate

回答

0

看起來您沒有在您的通知中設置public function via()。您需要指定您希望如何傳遞通知。

public function via($notifiable) 
{ 
    return ['mail']; 
} 

此外通知通常延長Illuminate\Notifications\Notification

Nevermind看起來像你沒有使用內置的通知系統。我的猜測是這樣的:

$mailQueue = (new SendNotification($contact)) 
        ->delay(5); 

如果你看看它的文檔,它傳遞一個碳對象到延遲。

$job = (new ProcessPodcast($podcast)) 
    ->delay(Carbon::now()->addMinutes(10)); 
+0

我試過@Pitchinnate,但它仍然不工作 - 我甚至做了一個單獨的項目只是爲了測試排隊,但它所做的只是'處理',從不發送 - 我猜它沒有發佈,但我不知道爲什麼。在排隊完成後,我還製作了另一個郵件將郵件發送給不同的用戶,但隊列添加到作業數據庫,但從未發佈,而其他未排隊的郵件發送。 – AwakenerOfDusk

+0

注意:我使用的是郵件類而不是通知類,因爲它在某種程度上更容易。 我也發現我的'SendNotification'類已經被處理,但是Mailiable類仍在處理中我猜這就是失敗狀態發生的地方。 '[2017年8月29日2點16分28秒]的處理:應用程序\作業\ SendNotification' '[2017年8月29日2點16分28秒]耗時:應用程序\作業\ SendNotification' '[ 2017-08-29 02:16:28]正在處理:App \ Mail \ Notification' – AwakenerOfDusk

+0

謝謝你的建議,但我試圖調試錯誤信息是使用'php artisan queue:listen --tries = 3' it posted在第三次嘗試後失敗並輸出特定的錯誤日誌! – AwakenerOfDusk