How to change mail configuration before sending a mail in the controller using Laravel?

I’m using Laravel 4, I would like to change the mail configuration (like driver/host/port/…) in the controller as I would like to save profiles in databases with different mail configuration. This is the basic send mail using configuration from config/mail.php

Mail::send(
    'emails.responsable.password_lost',
    array(),
    function($message) use ($responsable){
        $message->to($responsable->email, $responsable->getName());
        $message->subject(Lang::get('email.password_lost'));
    });

I’ve tried to put something like but it didn’t work

 $message->port('587');

Thanks for your support!

Jean

Answer

You can set/change any configuration on the fly using Config::set:

Config::set('key', 'value');

So, to set/change the port in mail.php you may try this:

Config::set('mail.port', 587); // default

Note: Configuration values that are set at run-time are only set for the current request, and will not be carried over to subsequent requests. Read more.

Update: A hack for saving the config at runtime.

Leave a Reply

Your email address will not be published. Required fields are marked *