我正在使用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。还有更好的方法吗?
答案 0 :(得分:3)
我认为这应该有用 - 除config('mail.to')
外,null
为UNIVERSAL_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(生产版本)中填写详细信息