Laravel 5.4未发送外部用户电子邮件通知队列

时间:2017-11-08 10:21:07

标签: laravel email notifications queue laravel-5.4

我使用Laravel Notifications with ShouldQueue实现向外部用户发送电子邮件,如下所示:

应用\ HTTP \控制器\ ActionController.php:

...
use App\Notifications\ExternalUserNotified;

class ActionController extends Controller
{
...

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

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

App / Notifications / ExternalUserNotified.php class:

...
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!');
    }
}

使用命令成功创建并运行队列作业时没有任何错误:

php artisan queue:work

但是,没有发送电子邮件到test@email.com(我正在使用MailTrap进行测试)。如果通知类未实现ShouldQueue,则电子邮件已成功发送。

如果用户实例是模型实例,则所有条件都有效:

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

我怀疑是临时的新用户实例:

$notified_user = (new User)->forceFill([
   'name'=> 'External User',
   'email'=> 'test@email.com'
]);
队列无法识别

非常感谢并提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这就是我解决问题的方法。

不要使用ShouldQueue

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

而是使用基础->queue

            Mail::to('test@gmail.com')->queue(new VerificationNewAccount($ran));

现在电子邮件已发送到gmail

奇怪的是,现在电子邮件没有打印在log中。 好吧,我不在乎。它开始了!

Laravel 5.4