Я хочу отправить письмо через laravel. По какой-то причине я только хочу установить cc
перед вызовом send
метод:
Mail::cc($cc_mail)->send(new MyMailAlert());
Затем я определяю получателя (to
) прямо в build
метод моего класса Mailable:
$this->subject($subject)->to($to_email)->view('my-mail');
Но это не удается:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError: вызов неопределенного метода Illuminate \ Mail \ Mailer :: cc ()
Как я могу отправить письмо, не зная получателя, прежде чем отправлять его в build
метод? Другими словами, я хочу установить получателя (в) непосредственно в build
метод, и я не знаю, как это сделать.
cc
задокументировано в Laravel Docs, но я не могу найти метод или свойство в Illuminate\Mail\Mailer
исходный код, ни в Документация по API Laravel. Таким образом, вы не можете использовать это таким образом.
Но 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
, Вы можете использовать свои пользовательские переменные в методе сборки, но, учитывая, что у класса уже есть эти свойства, пользовательские переменные не нужны.
Вот хак для решения этой проблемы:
Mail::to([])->cc($cc_mail)->send(new MyMailAlert());
Так что просто добавьте to()
метод с пустым массивом, и это работает. Это все еще хак, я не совсем уверен, что это сработает в будущем.