Laravel 8如何配置mail.php实现生产发真实邮件、开发发测试地址
解决方案
方案1:基于环境变量自动切换(最简便)
直接修改你的config/mail.php中的to配置段,通过Laravel自带的APP_ENV环境变量判断运行环境,非生产环境才启用全局收件人覆盖:
'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], // 修改后的to配置 'to' => env('APP_ENV') !== 'production' ? [ 'address' => 'xxxxx.yyyy@domain.com', 'name' => env('APP_NAME', 'Example'), ] : null,
逻辑说明:
- 当.env文件中
APP_ENV的值为production时,to配置项为null,Laravel不会启用全局收件人覆盖,邮件会正常发送到业务代码指定的真实收件地址 - 当
APP_ENV为local、testing等非生产值时,自动启用全局收件人配置,所有邮件都会发送到你指定的测试邮箱,可正常查看邮件渲染效果,不会误发用户
方案2:更灵活的可配置版本
如果需要不同开发人员自定义测试收件人,不需要修改配置文件,可以把测试收件人也放到.env配置中:
- 先在你的
.env文件中新增两个配置项:
# 非生产环境测试收件人配置 MAIL_TEST_TO_ADDRESS=xxxxx.yyyy@domain.com MAIL_TEST_TO_NAME=开发测试收件人
- 再修改
config/mail.php的to配置:
'to' => env('APP_ENV') !== 'production' ? [ 'address' => env('MAIL_TEST_TO_ADDRESS', 'default-test@example.com'), 'name' => env('MAIL_TEST_TO_NAME', env('APP_NAME', 'Example')), ] : null,
注意事项
- 请确保生产环境的
.env文件中APP_ENV的值严格为production,否则会出现生产环境邮件误发到测试邮箱的问题 - 生产环境如果开启了配置缓存,修改.env配置后需要执行
php artisan config:cache使配置生效 - 如果需要临时在本地测试发送邮件到真实收件人,只需要临时把本地.env的
APP_ENV改为production,测试完成后改回local即可
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

