首页 > 解决方案 > 发送队列电子邮件时 Laravel 错误

问题描述

我在failed_jobs数据库表中遇到以下错误:

ErrorException:未定义的属性:/home/sm/public_html/app/Mail/NewCustomer.php:45 中的 stdClass::$subscription

这是非常基本的。这意味着该属性$subscription不存在,但是......问题是我没有$subscription在类代码中的任何地方调用。

在控制器中,我分配值:

$to = ['email' => 'someemail@gmail.com', 'name' => 'Name test'];

$mail = new \stdClass;
$mail->to = $to;
$mail->subject = 'Subject test';
$mail->body = 'Body test';

\Mail::queue(new \App\Mail\NewCustomer($mail));

NewCustomer 类包含:

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class NewCustomer extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Holds the item content
     * 
     * @var Array
     */
    protected $item;

    /**
     * Create a new message instance.
     * 
     * @param Array
     *
     * @return void
     */
    public function __construct($item)
    {
        $this->item = $item;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $this->to($this->item->to['email'], $this->item->to['name'])
            ->subject($this->item->subject)
            ->view('mails/new_customer')
            ->with('item', $this->item);

        return $this;
    }
}

该视图mails/new_customer也不包含任何与$subscription.

这是一些缓存问题还是什么?我无法弄清楚变量$subscription来自哪里。

如果我立即发送电子邮件而不是队列,则效果很好:

\Mail::send(new \App\Mail\NewCustomer($mail));

标签: phplaravel

解决方案


解决了

这确实是一个缓存问题。php artisan queue:restart在终端或通过 laravel运行:

\Artisan::call('queue:restart');

推荐阅读