在 Laravel 中发送没有 `to` 方法的邮件
Sending a mail without `to` method in Laravel
我想通过 laravel 发送邮件。出于某种原因,我只想在调用 send
方法之前设置 cc
:
Mail::cc($cc_mail)->send(new MyMailAlert());
然后我直接在我的 Mailable class:
的 build
方法中定义收件人 (to
)
$this->subject($subject)->to($to_email)->view('my-mail');
但是失败了:
Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method Illuminate\Mail\Mailer::cc()
如何在 build
方法发送邮件之前不知道收件人的情况下发送邮件?换句话说,我想直接在 build
方法中设置收件人 (to),但我不知道该怎么做。
这里有一个解决这个问题的技巧:
Mail::to([])->cc($cc_mail)->send(new MyMailAlert());
因此只需添加一个带有空数组的 to()
方法即可。它仍然是一个 hack,我不确定它在未来是否会起作用。
cc
记录在 Laravel Docs, but I can't find the method or property in the Illuminate\Mail\Mailer
source code, neither in the Laravel API Documentation 中。所以你不能这样使用它。
但是 Illuminate\Mail\Mailable
有 cc
属性。所以,如果你想在发送之前添加 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
注意构建方法使用了可邮寄实例的subject
和to
属性,所以你必须在发送前设置它。
我不确定您从哪里检索构建方法示例中的 $subject
和 $to_email
,但对于我的示例,您必须将这些值提供给 $myMailAlert->subject
和$myMailAlert->to
。您可以在构建方法中使用自定义变量,但鉴于 class 已经具有这些属性,因此不需要自定义变量。
我想通过 laravel 发送邮件。出于某种原因,我只想在调用 send
方法之前设置 cc
:
Mail::cc($cc_mail)->send(new MyMailAlert());
然后我直接在我的 Mailable class:
的build
方法中定义收件人 (to
)
$this->subject($subject)->to($to_email)->view('my-mail');
但是失败了:
Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method Illuminate\Mail\Mailer::cc()
如何在 build
方法发送邮件之前不知道收件人的情况下发送邮件?换句话说,我想直接在 build
方法中设置收件人 (to),但我不知道该怎么做。
这里有一个解决这个问题的技巧:
Mail::to([])->cc($cc_mail)->send(new MyMailAlert());
因此只需添加一个带有空数组的 to()
方法即可。它仍然是一个 hack,我不确定它在未来是否会起作用。
cc
记录在 Laravel Docs, but I can't find the method or property in the Illuminate\Mail\Mailer
source code, neither in the Laravel API Documentation 中。所以你不能这样使用它。
但是 Illuminate\Mail\Mailable
有 cc
属性。所以,如果你想在发送之前添加 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
注意构建方法使用了可邮寄实例的subject
和to
属性,所以你必须在发送前设置它。
我不确定您从哪里检索构建方法示例中的 $subject
和 $to_email
,但对于我的示例,您必须将这些值提供给 $myMailAlert->subject
和$myMailAlert->to
。您可以在构建方法中使用自定义变量,但鉴于 class 已经具有这些属性,因此不需要自定义变量。