繁体   English   中英

在Laravel中发送没有`to`方法的邮件

[英]Sending a mail without `to` method in Laravel

我想通过laravel发送邮件。 出于某种原因,我只想在调用send方法之前设置cc

Mail::cc($cc_mail)->send(new MyMailAlert());

然后我直接在我的Mailable类的build方法中定义收件人( to ):

$this->subject($subject)->to($to_email)->view('my-mail');

但它失败了:

Symfony \\ Component \\ Debug \\ Exception \\ FatalThrowableError:调用未定义的方法Illuminate \\ Mail \\ Mailer :: cc()

build方法中发送邮件之前,如何在不知道收件人的情况下发送邮件? 换句话说,我想直接在build方法中设置收件人(to),我不知道如何做到这一点。

这是一个解决这个问题的黑客:

Mail::to([])->cc($cc_mail)->send(new MyMailAlert());

所以只需添加一个带有空数组的to()方法即可。 它仍然是一个黑客,我不确定它将来会起作用。

cc记录在Laravel Docs中 ,但我无法在Laravel API文档中的Illuminate\\Mail\\Mailer源代码中找到方法或属性。 所以你不能这样使用它。

但是Illuminate\\Mail\\Mailablecc属性。 所以,如果你想在发送之前添加cc并在构建方法上添加to ,你需要这样的东西:

MyMailAlert.php

class MyMailAlert extends Mailable implements ShouldQueue
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject($this->subject)->to($this->to)->view('my-mail');
    }
}

在你的控制器中:

$myMailAlert = new MyMailAlert();
$myMailAlert->cc = $cc_mail;

// At this point you have cc already setted.

Mail::send($myMailAlert); // Here you sends the mail

请注意,构建方法使用subjectto邮寄实例的属性,因此您必须在发送之前设置它。

我不确定你在构建方法示例中从哪里检索$subject$to_email ,但是对于我的示例,你必须将这些值$myMailAlert->subject$myMailAlert->to 您可以在构建方法中使用自定义变量,但是假定该类已具有这些属性,则不需要自定义变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM