为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_遁去的一_1 2023-09-15 21:21:47
我在使用时遇到邮件问题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.有谁知道我在队列中失踪了?
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

当作业或电子邮件为 时queued,您将无法再访问会话(会话中的变量),因为“异步”处理作业时没有 HTTP 访问。因此,您无法获得经过身份验证的用户(处理作业时没有特定用户)。

您需要将经过身份验证的用户(作为对象或数组)发送到类的构造函数SendOrderConfirmation,然后您可以在类内部使用。

非队列将起作用,因为它将是sync并且仍然可以使用会话。


查看完整回答
反对 回复 2023-09-15
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您是否尝试过仅将名称作为数据发送,将其添加到您的名称$order_data并将其显示在邮件刀片中,看看是否可以解决问题。



查看完整回答
反对 回复 2023-09-15
  • 2 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信