如何根据app环境在Laravel发送邮件?

How to send emails in Laravel according to app environment?

我有几个发送电子邮件的控制器,它们都使用 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,但似乎没有什么不同。

我做错了什么?

您应该将通用 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