我正在尝试使用以下代码通过Redis队列和Mailgun发送延时电子邮件...
$when = \Carbon\Carbon::now()->addMinutes(5);
Mail::to($demoDownloader->Email)->later($when, new DemoRequestFollowUp($demoDownloader));
我可以看到作业已添加到redis队列(使用Redis Desktop Manager)并在队列中消失之前保持5分钟。不幸的是,它永远不会出现在Mailgun日志中。
如果我改为使用这行代码......
Mail::to($demoDownloader->Email)->send(new DemoRequestFollowUp($demoDownloader));
...然后电子邮件显示在Mailgun日志中,随后成功到达目标邮箱(当然减去时间延迟)。
没有错误消息写入storage / logs / laravel.log所以我有点不知道为什么这不起作用。我很确定我已经使用了手册中指定的语法。
顺便说一句,我的mailable看起来像这样......
<?php
namespace App\Mail;
use \App\DemoDownloader;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class DemoRequestFollowUp extends Mailable
{
use Queueable, SerializesModels;
public $requestee;
public function __construct(DemoDownloader $requestee)
{
$this->requestee = $requestee;
}
public function build()
{
return $this->subject('Overview')
->view('email-demo-request-follow-up');
}
}
我非常感谢任何意见。
答案 0 :(得分:0)
我忽略了查看failed_jobs
表,它给了我所需的线索......
Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\DemoDownloader]
由于传递给DemoDownloader
构造函数的DemoRequestFollowUp
实例实际上没有被使用,我删除了参数并从类中删除了$requestee
公共属性及其在构造函数。完成这些更改后,电子邮件在指定的延迟间隔过后可靠地到达。