2017-11-08 5 views
1
gesendet werden

Ich verwende Laravel Benachrichtigungen mit ShouldQueue Implementierung E-Mail an externe Benutzer zu senden, wie folgt:Laravel 5.4 Externe Benutzer E-Mail-Benachrichtigungswarteschlange nicht

App \ Http \ Controllers \ ActionController.php:

... 
use App\Notifications\ExternalUserNotified; 

class ActionController extends Controller 
{ 
... 

    public function send() 
    { 
     $notified_user = (new User)->forceFill([ 
      'name'=> 'External User', 
      'email'=> '[email protected]' 
     ]); 

     $notified_user->notify(new ExternalUserNotified($data)); 
     ... 
    } 
} 

App/Benachrichtigungen/ExternalUserNotified.php Klasse:

... 
class ExternalUserNotified extends Notification implements ShouldQueue 
{ 
    use Queueable; 

    private $data; 

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

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


    public function toMail($notifiable) 
    { 

     return (new MailMessage) 
        ->subject('Test Subject') 
        ->line('Dear User,') 
        ->line('Test notification content...') 
        ->line('Thank you for using our application!'); 
    } 
} 

Die Warteschlange Job erfolgreich erstellt wurde, und führen Sie mit dem Befehl ohne Fehler:

php artisan queue:work 

Allerdings gab es keine E-Mail an [email protected] gesendet (I MailTrap zum Testen verwende). Die E-Mail wurde erfolgreich gesendet, wenn die Benachrichtigungsklasse "ShouldQueue" nicht implementiert.

Alle Bedingungen funktionieren, wenn Benutzerinstanz eine Modellinstanz ist:

$notified_user = User::find(1); 
$notified_user->notify(new ExternalUserNotified($data)); 

Ich vermutete, dass die temporäre neue Benutzerinstanz:

$notified_user = (new User)->forceFill([ 
    'name'=> 'External User', 
    'email'=> '[email protected]' 
]); 

nicht von der Warteschlange erkannt werden konnte.

Vielen Dank und vielen Dank im Voraus für Ihre Hilfe.

+0

das gleiche Problem hier. – roll

Antwort

1

so habe ich das Problem gelöst.

Dont ShouldQueue

  class VerificationNewAccount extends Mailable 
      { 
       use Queueable, SerializesModels; 
       public function __construct() 
       { 
       } 
       public function build() 
       { 
        return $this->from('[email protected]') 
         ->view('email.verification-request'); 
       } 
      } 

Statt der Basis verwenden verwenden ->queue

  Mail::to('[email protected]')->queue(new VerificationNewAccount($ran)); 

jetzt die E-Mail an gmail

Der seltsame Teil wird jetzt gesendet wird, dass die E-Mail nicht in log gedruckt wird . Nun, es ist mir egal. Es woks!

Laravel 5.4

+0

Vielen Dank @roll für die nützliche Problemumgehung. Denkst du, es ist das Problem von ShouldQueue oder Laravel Notifications? Wie auch immer, lassen Sie mich auch überprüfen, ob ich die grundlegende '-> Warteschlange mit Benachrichtigungen implementieren kann. – borort