我使用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'
]);
队列无法识别。
非常感谢并提前感谢您的帮助。
答案 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