【问题标题】:Laravel .env constants not working with mail.phpLaravel .env 常量不适用于 mail.php
【发布时间】:2016-05-13 21:28:09
【问题描述】:

错误:

在我的 mail.php 文件中,如果我设置了

   'driver' => env('MAIL_DRIVER'),

并将其添加到我的 .env 文件中:

    MAIL_DRIVER=log

然后我得到以下错误:

Swift_TransportException in AbstractSmtpTransport.php line 383:
Expected response code 250 but got code "530", 
with message "530 5.7.1 Authentication required"

不稳定的解决方法

在我的 mail.php 文件中,我有以下内容:

   'driver' => 'log',

工作正常。

结论

我的理论是 mail.php 没有正确读取我的 .env 文件常量,因为用实际字符串替换它可以解决问题。但是,这个文件的默认值都使用 .env 常量,所以我想知道 为什么我的 .env 常量在我的 mail.php 文件中没有被识别?

仅供参考

在同一个应用程序中除了 mail.php 之外的其他文件中,我正在使用其他可以正常工作的 .env 常量。例如,在我的 UserTableSeeder 类中,我有:

    factory(App\User::class, 1)->create([
        'email' => env('ADMIN_EMAIL'),
        'password' => Hash::make(env('ADMIN_PASSWORD')),
        'is_admin' => 1
    ]);

它成功地使用了我的 .env 文件中的以下常量:

ADMIN_EMAIL=xxxxxxx@yahoo.com
ADMIN_PASSWORD=xxxxxxx

我尝试了以下 2 个 php artisan 命令(php artisan cache:clear 和 php artisan config:clear),但是当“log”是我的 .环境文件:

04:52:54 Fri May 13 vagrant@homestead (email_notifications)  [130]
~/Code/myapp $   php artisan config:clear
Configuration cache cleared!

05:52:56 Fri May 13 vagrant@homestead (email_notifications)  [0]
~/Code/myapp $   php artisan tinker
Psy Shell v0.6.1 (PHP 7.0.2-4+deb.sury.org~trusty+1 — cli) by Justin Hileman
>>> dd(env('MAIL_DRIVER'));
"smtp"
>>> exit
Exit:  Goodbye.

05:53:23 Fri May 13 vagrant@homestead (email_notifications)  [0]
~/Code/myapp $   php artisan cache:clear
Application cache cleared!

05:53:48 Fri May 13 vagrant@homestead (email_notifications)  [0]
~/Code/myapp $   php artisan tinker
Psy Shell v0.6.1 (PHP 7.0.2-4+deb.sury.org~trusty+1 — cli) by Justin Hileman
>>>  dd(env('MAIL_DRIVER'));
"smtp"

【问题讨论】:

  • .env 可能无法正确解析或其他原因,请尝试在.env('MAIL_DRIVER','log') 上添加第二个参数,以便它可以默认记录,启动php artisan tinker 并转储env('MAIL_DRIVER') 输出什么?
  • 在修补程序中,dd(env('MAIL_DRIVER'));结果是“smtp”作为输出,它在我的 .env 文件中显示“log”。但是, dd(env('ADMIN_EMAIL'));结果是我的正确电子邮件。我确实注意到,如果我更改我的电子邮件,我必须运行 php artisan cache:clear 之前更新显示在修补程序中,但是 dd(env('MAIL_DRIVER'));仍然导致“smtp”!
  • 是的,我看到了,但它实际上并不能解决我的问题
  • 您是否正在尝试运行测试?如果是这种情况,请尝试将 MAIL_DRIVER 添加到 phpunit.xml 文件中。

标签: php laravel environment-variables laravel-5.1


【解决方案1】:

我不确定你是否已经解决了。但我会尝试提供一个过于简单的解决方案。

简答:当您对 .env 文件进行更改时,您需要立即重新启动应用程序。


不长答案:这是因为你的 .env 文件已经被 laravel 应用程序访问了。如果您在应用程序在本地计算机上运行时更改了 .env 文件,它不会立即识别它。您必须关闭整个 laravel 应用程序并使用 $ php artisan serve 重新启动一次。

这样做,肯定会占用环境常量,你会得到想要的结果。

希望这对您有所帮助。快乐编码。干杯。

【讨论】:

  • 感谢您的回答。我还没有解决这个问题,虽然你的回答可能会有所帮助。 php artisan serve 是否会关闭并重新启动 laravel 应用程序?如果没有,我如何在重启之前关闭 Laravel 应用程序?
  • 关闭你的终端就完成了。这将关闭你的应用程序。然后做$ php artisan serve..
【解决方案2】:

.env 文件中可能有默认常量,其中包含一个用于MAIL_DRIVER=sftp 的常量。如果您为同一个常量添加其他值,则将定义第一个常量。因此,请确保在您的 .env 文件中只有 1 个常量定义,或者如果由于某种原因您想要在其中包含多个常量,则至少将其定义为第一个。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 2016-02-12
    • 2019-08-20
    • 2020-02-09
    • 1970-01-01
    • 2018-09-14
    • 2015-01-01
    • 2021-04-15
    • 2019-12-23
    相关资源
    最近更新 更多