Laravel在开发与生产中“普遍存在”

时间:2017-04-11 08:58:34

标签: php laravel email laravel-5.2

我正在使用Laravel 5.2应用程序。在我的开发和登台环境中,我想使用“Universal To”邮件配置选项described in the docs。通用到开发环境可确保所有电子邮件都转到该地址,而不是真正的客户/客户/等等。

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

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

配置/ mail.php

'to' => [
    'address'   => env('UNIVERSAL_TO', false)
],

开发.env

UNIVERSAL_TO=my-testing-address@somewhere.com

这很好 - 所有电子邮件都按预期转到指定的UNIVERSAL_TO。但是,如果我将其改为生产中我想要的东西,例如:

生产.env

UNIVERSAL_TO=

(或='',或=false,或者完全忽略这一点),发送任何邮件都失败了(在storage/laravel.log中):

  

local.ERROR:异常'Swift_RfcComplianceException',消息'给定邮箱中的地址[]不符合RFC 2822,3.6.2。 in path / to / vendor / 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;

但这似乎有点...... hacky。还有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

我认为这应该有用 - 除config('mail.to')外,nullUNIVERSAL_TO

'to' => env('UNIVERSAL_TO', false) ? [
    'address' => env('UNIVERSAL_TO'),
] : null,

答案 1 :(得分:0)

是的,我仍然做着你所谓的hacky方式,现在我仍然没有找到更好的方法。

$default = [
    ....
]

if (env('APP_ENV', 'local') === 'staging'){
    $default['to'] = [
        'address' => 'webmaster@xxx.com',
    ]
}

return $default;

答案 2 :(得分:0)

我在搜寻这种行为时偶然发现了这个问题。由于答案并不完美,因此我决定添加结果。

如果曾经被破坏过,看来现在已经修复了。在您的.env文件中省略UNIVERSAL_TO时,邮件将仅发送给指定的收件人。

也许问题在于您没有null值,但默认值为false

config / mail.php

    'to' => [
        'address' => env('MAIL_GLOBAL_RECIPIENT'), // when not found, defaults to null
        'name' => 'Developer'
    ],

本地.env

MAIL_GLOBAL_RECIPIENT=my@email.com

production .env甚至没有该变量

答案 3 :(得分:0)

仅当存在“通用至”时使用。因此,以下工作原理: config / mail.php:

'to' => [
    'address' => env('UNIVERSAL_TO'),
    'name' => env('UNIVERSAL_TO_NAME')
],

填写.env(测试)中的详细信息:

UNIVERSAL_TO=
UNIVERSAL_TO_NAME=

不要在.env(生产版本)中填写详细信息