Search code examples
phplaravelemaillumen

Email value is undefined


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.


Solution

  • 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) {