Laravel .env常量不与mail.php一起使用

时间:2016-05-13 21:28:10

标签: php laravel environment-variables laravel-5.1

错误:

在我的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文件中无法识别?

FYI

在同一个应用程序中除了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工匠命令(php artisan cache:clear和php artisan config:clear),但是" smtp" " log"继续输出是我在.env文件中的内容:

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"

2 个答案:

答案 0 :(得分:0)

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

简答:您需要在.env文件中进行更改时立即重启应用程序。

不那么长答案:这种情况正在发生,因为laravel应用程序已经访问了您的.env文件。如果在应用程序在本地计算机上运行时对.env文件进行更改,则无法立即识别它。您必须关闭整个laravel应用程序并使用$ php artisan serve重启一次。

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

希望这会帮助你。快乐的编码。欢呼声。

答案 1 :(得分:0)

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