Laravel.env常量不适用于mail.php


Laravel .env constants not working with mail.php

错误:

在我的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

我尝试了以下两个php artisan命令(php artisan cache:clear和php artisan config:clear),但当"log"是我的.env文件中的内容时,"smtp"继续输出:

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文件中进行更改时,您需要立即重新启动应用程序。


Not So Long Answer:之所以会发生这种情况,是因为laravel应用程序已经在访问您的.env文件。如果您在本地计算机上运行应用程序时对.env文件进行了更改,它将不会立即识别它。您将不得不关闭整个laravel应用程序,并使用$ php artisan serve重新启动它一次。

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

希望这能帮到你。快乐的编码。干杯

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