无法让Laravel Mail :: to() - > later()工作

时间:2018-05-24 16:09:08

标签: laravel redis

我正在尝试使用以下代码通过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');
    }
}

我非常感谢任何意见。

1 个答案:

答案 0 :(得分:0)

我忽略了查看failed_jobs表,它给了我所需的线索......

Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\DemoDownloader]

由于传递给DemoDownloader构造函数的DemoRequestFollowUp实例实际上没有被使用,我删除了参数并从类中删除了$requestee公共属性及其在构造函数。完成这些更改后,电子邮件在指定的延迟间隔过后可靠地到达。