【发布时间】:2017-09-06 13:30:30
【问题描述】:
我正在使用 Laravel 5.2 应用程序。在我的开发和登台环境中,我想使用“Universal To”邮件配置选项described in the docs。开发环境中的通用收件人可确保所有电子邮件都发送到该地址,而不是发送给真正的客户/客户/其他任何人。
我不知道如何在生产中以不同的方式指定它。在生产中应该没有通用的 - 电子邮件应该发送到真实地址。
使用不同env() 值的标准方法似乎不起作用。例如:
config/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。在路径/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。有没有更好的办法?
【问题讨论】:
-
我不明白。您尝试将其设置为空,然后它尝试将邮件发送到一个空的电子邮件地址?
-
你不能定义你的电子邮件为假。 'address' => env('UNIVERSAL_TO', 'my-testing-address@somewhere.com) 并且此行应该是 UNIVERSAL_TO= 在您的 .env 文件中,因此如果您定义 UNIVERSAL_TO 您将使用它(生产)。在暂存或本地,您将使用测试地址。 false 不是电子邮件
-
在生产中应该有 no 通用的。请参阅我链接到的文档 - 通用的要点是在开发环境中捕获电子邮件,这样它们就不会发送给真正的客户。
-
那么不要定义它。在您的生产中使用 MAIL_DRIVER=log in local 和 smpt,这样您就可以在 staging/local 中记录您的电子邮件,并在生产中发送真实的电子邮件
-
谢谢,但这不是我提出的问题的解决方案。我想使用记录在案的通用功能,而不是其他东西。我需要能够查看客户端中的电子邮件;我还需要其他人有权检查它们。
标签: php laravel email laravel-5.2