如何在使用Laravel在控制器中发送邮件之前更改邮件配置?

jib*_*ibe 12 php email laravel

我正在使用Laravel 4,我想更改控制器中的邮件配置(如驱动程序/主机/端口/ ...),因为我希望在具有不同邮件配置的数据库中保存配置文件.这是使用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'));
    });
Run Code Online (Sandbox Code Playgroud)

我试图把类似的东西但它没有用

 $message->port('587');
Run Code Online (Sandbox Code Playgroud)

感谢您的支持!

吉恩

The*_*pha 21

您可以使用以下方式动态设置/更改任何配置Config::set:

Config::set('key', 'value');
Run Code Online (Sandbox Code Playgroud)

因此,要设置/更改mail.php您的端口,可以尝试这样做:

Config::set('mail.port', 587); // default
Run Code Online (Sandbox Code Playgroud)

注意:在运行时设置的配置值仅为当前请求设置,不会转移到后续请求.阅读更多.

更新:在运行时保存配置的hack.


Hil*_*ren 5

选定的答案对我不起作用,我需要添加以下内容以注册更改。

Config::set('key', 'value');
(new \Illuminate\Mail\MailServiceProvider(app()))->register();
Run Code Online (Sandbox Code Playgroud)


Fra*_*iel 5

我知道有点晚了,但一种方法可能是为 laravel 邮件程序提供一个快速邮件程序。

<?php

$transport = (new \Swift_SmtpTransport('host', 'port'))
    ->setEncryption(null)
    ->setUsername('username')
    ->setPassword('secret');

$mailer = app(\Illuminate\Mail\Mailer::class);
$mailer->setSwiftMailer(new \Swift_Mailer($transport));

$mail = $mailer
    ->to('user@laravel.com')
    ->send(new OrderShipped);
Run Code Online (Sandbox Code Playgroud)