Я новичок в PHP и еще больше в Laravel, и мне трудно отправить электронное письмо не указанному пользователю.
Поэтому я использую класс Illuminate \ Support \ Facades \ Mail.
Если я сделаю что-то подобное, все будет нормально:
$registrationMail = [
'title' => 'Registrazione albergatore su portale BeTrivius',
'url' => URL::to('/').'/activate?email='.$data['email'].'&token='.$token,
'email' => $data['email'],
'name' => $data['name'],
'surname' => $data['surname']
];
Mail::send('emails.registrationMail', $registrationMail, function($message) {
$message->to('[email protected]', 'recipient-name')->subject('email subject');
});
Поэтому я вызываю метод send () передаваемого ему класса Mail:
- Представление, представляющее шаблон электронного письма.
- Массив, содержащий некоторые данные, использованные в предыдущем представлении.
- Функция обратного вызова, в которой содержится логика для установки адреса электронной почты получателя и темы электронной почты.
Он работает нормально, но при отправке таким образом получатель электронной почты является статическим, и электронная почта всегда будет отправляться на один и тот же адрес электронной почты.
Это не очень хорошо для меня, потому что я должен отправить это электронное письмо на адрес, указанный в свойстве $ registrationMail ['email'].
Но поступаем так:
Mail::send('emails.registrationMail', $registrationMail, function($message) {
$message->to($registrationMail['email'], $data['name'].' '.$data['surname'])->subject('titolo');
});
$ registrationMail кажется не видимым в функции обратного вызова (он говорит мне Неопределенная переменная). Почему я не вижу внешнее свойство изнутри функции обратного вызова?
Поэтому я не могу получить эту информацию таким образом.
Поэтому я попытался добавить переменную $ registrationMail в качестве параметра этой функции обратного вызова следующим образом:
Mail::send('emails.registrationMail', $registrationMail, function($message, $registrationMail) {
$message->to($registrationMail['email'], $registrationMail['name'].' '.$registrationMail['surname'])->subject('titolo');
});
Таким образом, переменная $ registrationMail не является неопределенной, но когда она пытается отправить электронное письмо, я получаю следующее сообщение об ошибке:
ErrorException in RegistrationController.php line 90:
Missing argument 2 for App\Http\Controllers\RegistrationController::App\Http\Controllers\{closure}()
in RegistrationController.php line 90
at HandleExceptions->handleError(2, 'Missing argument 2 for App\\Http\\Controllers\\RegistrationController::App\\Http\\Controllers\\{closure}()', 'C:\\xampp\\htdocs\\HotelRegistration\\app\\Http\\Controllers\\RegistrationController.php', 90, array('message' => object(Message))) in RegistrationController.php line 90
at RegistrationController->App\Http\Controllers\{closure}(object(Message))
at call_user_func(object(Closure), object(Message)) in Mailer.php line 199
at Mailer->send('emails.registrationMail', array('title' => 'Registrazione albergatore su portale BeTrivius', 'url' => 'http://laravel.dev/[email protected]&token=4759d4ec56cf1e63447638e0d7a042e6', 'email' => '[email protected]', 'name' => 'Andrea', 'surname' => 'Nobili'), object(Closure)) in Facade.php line 221
at Facade::__callStatic('send', array('emails.registrationMail', array('title' => 'Registrazione albergatore su portale BeTrivius', 'url' => 'http://laravel.dev/[email protected]&token=4759d4ec56cf1e63447638e0d7a042e6', 'email' => '[email protected]', 'name' => 'Andrea', 'surname' => 'Nobili'), object(Closure))) in RegistrationController.php line 93
at Mail::send('emails.registrationMail', array('title' => 'Registrazione albergatore su portale BeTrivius', 'url' => 'http://laravel.dev/[email protected]&token=4759d4ec56cf1e63447638e0d7a042e6', 'email' => '[email protected]', 'name' => 'Andrea', 'surname' => 'Nobili'), object(Closure)) in RegistrationController.php line 93
at RegistrationController->store(object(Request))
at call_user_func_array(array(object(RegistrationController), 'store'), array(object(Request))) in Controller.php line 55
at Controller->callAction('store', array(object(Request))) in ControllerDispatcher.php line 44
где строка 90:
Mail::send('emails.registrationMail', $registrationMail, function($message, $registrationMail) {
Итак, проблема, похоже, в том, что я не могу передать второй параметр внутренней функции обратного вызова. Почему?
Как я могу правильно передать адрес электронной почты получателя в эту внутреннюю функцию обратного вызова? Как это сделать лучше всего?