I have a function which registers user and there it should send a welcome email.
public function register(Request $request) {
$this->validate($request, [
'email' => 'required|email|unique:users,email,',
'password' => ['required',
'min:6',
'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%_]).*$/',
'confirmed'],
'password_confirmation' => 'required',
'name' => 'required',
]);
$user = User::create([
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => Hash::make($request->get('password')),
]);
$email = $request->get('email');
$data = array('name' => $request->get('name'));
Mail::send(['text' => 'mail.mail'], $data, function ($message) {
$message->to($email)->subject
('MySite - Welcome');
$message->from('[email protected]', 'MySIte');
});
return response()->json(compact('user'), 200);
}
But after successful registration I get an error message that email field is undefined. And of course, no email is sent.
What could be the reason for this?
If I dd($email)
before sending email I get correct email address.
Because of how PHP variables are scoped, $email
isn't defined within this function:
Mail::send(['text' => 'mail.mail'], $data, function ($message) {
$message->to($email) ...
});
You can pass it to the function with the use
keyword:
Mail::send(['text' => 'mail.mail'], $data, function ($message) use($email) {