Laravel在开发与生产中“通用”

Don*_*nic 5 php email laravel laravel-5.2

我正在使用Laravel 5.2应用程序。在开发和暂存环境中,我想使用docs中描述的“通用到”邮件配置选项。开发环境的通用性可确保所有电子邮件都发送至该地址,而不发送给真实的客户/客户/任何人。

我无法弄清楚如何在生产中以不同的方式指定此名称。在生产中应该没有通用的-电子邮件应该发送到真实地址。

使用不同env()值的标准方法似乎不起作用。例如:

config / mail.php

'to' => [
    'address'   => env('UNIVERSAL_TO', false)
],
Run Code Online (Sandbox Code Playgroud)

开发.env

UNIVERSAL_TO=my-testing-address@somewhere.com
Run Code Online (Sandbox Code Playgroud)

这可以正常工作-所有电子邮件都UNIVERSAL_TO按预期发送到指定的电子邮件。但是,如果我将其更改为生产中的需求,例如:

生产.env

UNIVERSAL_TO=
Run Code Online (Sandbox Code Playgroud)

(或='',或=false,或者只是完全省略了此内容),则发送任何邮件均失败,并带有(在中storage/laravel.log):

local.ERROR:消息为“给定[]的邮箱中的地址不符合RFC 2822,3.6.2”的异常'Swift_RfcComplianceException'。在路径/到/供应商/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php:348中

config/mail.php 只是返回一个数组,所以我想我可以改为将其设置为变量,然后根据环境将“ to”附加到它,如下所示:

$return = [ ... normal mail config array ... ];

if (!\App::environment('production')) {
    $return['to'] => [
        'address' => 'my-testing-address@somewhere.com'
    ];
}

return $return;
Run Code Online (Sandbox Code Playgroud)

但这似乎有点...骇人听闻。有没有更好的办法?

cee*_*yoz 5

我认为这应该工作- 除非设置了config('mail.to')null否则它会保留UNIVERSAL_TO

'to' => env('UNIVERSAL_TO', false) ? [
    'address' => env('UNIVERSAL_TO'),
] : null,
Run Code Online (Sandbox Code Playgroud)