如何根据应用环境在Laravel中发送电子邮件?

时间:2018-01-23 13:05:47

标签: php laravel email events swiftmailer

我有几个发送电子邮件的控制器,所有控制器都使用Illuminate\Mail,它提供了一个名为Illuminate\Mail\Events\MessageSending的事件,在发送邮件时触发。

我想在此时截取消息并更改$to变量,用开发者电子邮件替换其中的任何值,具体取决于\App::environment()值。

我在EventServiceProvider中添加了一个监听器,接收MessageSending的实例,该实例将\Swift_Message $event作为参数传递给侦听器的handle()方法。

然而,我被困在这里。这就是我的所作所为:

    // dd()'s are removed in final code, they are here just as examples

    // array with real emails
    dd($event->message->getTo());

    if (!\App::environment('production')) {
        $event->message->SetTo(['developer@test.com']);
    }

    // developer@test.com
    dd($event->message->getTo());

    return $event;

它改变了$ event,但它似乎没有什么区别。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该将通用to放入.env个文件中,而不是在事件中尝试覆盖它。

所以,把它放到.env

MAIL_TO_EMAIL=test@test.com
MAIL_TO_NAME=test

然后在config/mail.php

'to' => [
    'address' => env('MAIL_TO_EMAIL'),
    'name' => env('MAIL_TO_NAME')
],

https://laravel.com/docs/5.5/mail#mail-and-local-development