Отправка почты без `to` метода в Laravel

Я хочу отправить письмо через 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 метод, и я не знаю, как это сделать.

3

Решение

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, Вы можете использовать свои пользовательские переменные в методе сборки, но, учитывая, что у класса уже есть эти свойства, пользовательские переменные не нужны.

1

Другие решения

Вот хак для решения этой проблемы:

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

Так что просто добавьте to() метод с пустым массивом, и это работает. Это все еще хак, я не совсем уверен, что это сработает в будущем.

2

По вопросам рекламы [email protected]