phplaravellaravel-8laravel-mail

Change MAIL_FROM_NAME value from laravel controller


I want to sent 2 mails, but from name is different for one, while for second its the default in env file

I tried this:

        Mail::send(
            'register.mail',
            ['record' => $record],
            function ($message) use ($record) {
                $message->to('usama@gmail.com');
                $message->subject('New Store Registration Request');
            }
        );
        // Update the mail from name
        Config::set('mail.from.name', 'Custom name');  
        Mail::send(
            'register.welcomeMail',
            ['record' => $record],
            function ($message) use ($record) {
                $message->to($record['email']);
                $message->subject('Store Registration');
                // Update the mail from name back to "Portal"
                Config::set('mail.from.name', 'Portal');
            }
        );

But this send mail with "Portal" as from name to both of these mails, am I doing it wrong and how can I fix this?


Solution

  • Well you can change it without using the config or changing the env variables

    Since you are using the a callback instead of a class you can just do this :

    use Illuminate\Mail\Message;
    
    Mail::send(
        view: 'register.email',
        data: ['record', $record],
        callback: function (Message $message) {
            $message->to('usama@gmail.com');
            $message->from('from@email.com', 'FromName');
            $message->subject('Mail Subject');
            
        }
    );
    

    The $message is a instance of Message class which where you can access the from() method to edit where the email come from. You can type hint it in the callback like the one I did so that you will be confuse.

    You can also dig deeper to the Mail::send() to check how it works.