应用程序无法使用 Mail::...queue() 发送电子邮件

我在使用时遇到邮件问题queue。如果我使用 Mail send(),一切正常。


控制器:


Mail::to($order_data->client_email)

    ->cc([

        ['email' => $order_data->seller->email],

        ['email' => auth()->user()->email]

    ])

    ->queue(new SendOrderConfirmation($order_data));

可邮寄的:


class SendOrderConfirmation extends Mailable

{

    use Queueable, SerializesModels;


    /**

     * Defines a public variable $order_data that we will be using to pass in parameters from our controller.

     */

    public $order_data;


    /**

     * Create a new message instance.

     */

    public function __construct($data)

    {

        // set email data

        $this->order_data = $data;


        // Set Reply to address

        // Basically, the name and email from who's sending this email

        $this->replyto(auth()->user()->email, auth()->user()->name);


        // Set from

        $this->from(auth()->user()->email, auth()->user()->name);


        // set email subject

        $this->subject('Laminar - Confirmação da Encomenda N.º '.$this->order_data->order_nr);

    }


    /**

     * Build the message.

     *

     * @return $this

     */

    public function build()

    {

        return $this->view('send_emails.Lamimail.SendOrderConfirmation');

    }

}

如果我使用队列()触发电子邮件,我会收到有关望远镜作业的错误消息:


Trying to get property 'name' of non-object 

(View: path\resources\views\send_emails\Lamimail\SendOrderConfirmation.blade.php)

但是,在邮件视图中,名称是一个简单的auth()->user()->name.


有谁知道我在队列中失踪了?


qq_遁去的一_1
浏览 126回答 2
2回答

慕森卡

当作业或电子邮件为 时queued,您将无法再访问会话(会话中的变量),因为“异步”处理作业时没有 HTTP 访问。因此,您无法获得经过身份验证的用户(处理作业时没有特定用户)。您需要将经过身份验证的用户(作为对象或数组)发送到类的构造函数SendOrderConfirmation,然后您可以在类内部使用。非队列将起作用,因为它将是sync并且仍然可以使用会话。

蓝山帝景

您是否尝试过仅将名称作为数据发送,将其添加到您的名称$order_data并将其显示在邮件刀片中,看看是否可以解决问题。
打开App,查看更多内容
随时随地看视频慕课网APP