当我尝试发送密码重置邮件时,我在Laravel 5.1 Homestead中使用库存电子邮件设置收到此错误。
Swift_TransportException in AbstractSmtpTransport.php line 162:Cannot send message without a sender address
地址填写在app / config / mail.php中:
'from' => array('address' => 'myusername@gmail.com', 'name' => 'hawle'),
答案 0 :(得分:36)
在.env
文件中,您需要设置电子邮件帐户的电子邮件地址和密码。您还需要设置正在使用的邮件服务器的主机和端口。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=25
MAIL_USERNAME= ***USER NAME***
MAIL_PASSWORD= ***PASSWORD***
MAIL_ENCRYPTION=tls
或确保mail.php
文件中的所有内容都已完整(请参阅下面的注释)。
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to deliver e-mails to
| users of the application. Like the host we have set this value to
| stay compatible with the Mailgun e-mail application by default.
|
*/
'port' => env('MAIL_PORT', 25),
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => ['address' => 'myusername@gmail.com', 'name' => 'hawle'],
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
注意:最好使用.env
文件,因为您最有可能在生产环境中使用不同的配置。
如果一切都完成但仍然无效,则可能是缓存。您可以使用以下命令清除配置缓存:
php artisan config:cache
另请注意:
mail.php
文件位于/app/config/mail.php
(正如OP所说)。 .env
文件位于项目的根目录中。 正如Viktorminator所说: 考虑创建应用密码而不是使用您通常的传递来满足此需求。用于创建密码的链接myaccount.google.com/apppasswords
答案 1 :(得分:15)
确保在app / config / mail.php中设置了'from'
'from' => ['address' => 'myname@gmail.com', 'name' => 'myname']
它将解决问题。
答案 2 :(得分:13)
也许有人正在使用laravel 6
其问题是“没有发件人地址就无法发送消息”,因此.env
文件中没有电子邮件地址可以发送电子邮件
只需添加发件人电子邮件地址
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=example@gmail.com **here**
MAIL_FROM_NAME="${APP_NAME}"
运行之后,我没有更改mail.php文件中的任何内容,它在laravel 6中对我来说是有效的
php artisan config:cache
答案 3 :(得分:3)
我刚刚在Laravel 7.9中解决了这个问题。我正在使用mailtrap.io,并且我认为问题是缺少MAIL_ENCRYPTION=tls
变量。该变量在mailtrap.io示例配置或.env.example文件中不存在。
这是我的.env设置:
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=[found in mailtrap settings]
MAIL_PASSWORD=[found in mailtrap settings]
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=me@mydomain.com
MAIL_FROM_NAME="${APP_NAME}"
答案 4 :(得分:2)
如果您无法访问.env文件,则可以在app / config / mail.php上为这些env调用添加默认值,如下所示:
'from' => ['address' => env('MAIL_FROM_EMAIL','do_not_reply@email.com'), 'name' => env('MAIL_FROM_NAME','SpongeBob')],
这种方法会尝试从.env文件中获取数据,如果没有任何内容,则默认为您设置的内容。
答案 5 :(得分:1)
我在这里尝试了所有解决方案,但直到运行这三个命令后才起作用
php artisan config:clear
php artisan cache:clear
php artisan config:cache
答案 6 :(得分:1)
通过执行以下操作设法解决了这个问题
转到.env文件
确保设置了 MAIL_FROM_ADDRESS
的值。
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=***USERNAME**
MAIL_PASSWORD=***PASSWORD***
MAIL_ENCRYPTION=tls
MAIL_FROM_NAME="${APP_NAME}"
MAIL_FROM_ADDRESS=no-reply@YOURDOMAIN
答案 7 :(得分:1)
转到位于文件夹根目录下的.env
文件
如果还使用smpt.mailtrap.io
作为MAIL_HOST,则可以像这样设置邮件的配置。
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=******username******
MAIL_PASSWORD=******password******
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=john@example.com
MAIL_FROM_NAME="${APP_NAME}"
现在设置您的MAIL_USERNAME
和MAIL_PASSWORD
click here to go to mailtrap
现在注册或登录,如果您已经拥有一个帐户。
然后单击“收件箱”,然后选择演示收件箱,您会在其中找到集成下拉列表,然后为Laravel选择,它将为您提供完成.env
文件所需的用户名和密码。
然后将信息保存在.env
文件中以进行邮件配置。
现在最重要的部分是您在终端中运行这两个命令行。
再次运行php artisan serve
运行php artisan config:clear
然后进行处理,并查看邮件陷阱收件箱。 对我来说,它像这样工作。
答案 8 :(得分:1)
确保env .file中的MAIL_FROM_ADDRESS不为空。
MAIL_FROM_ADDRESS=test@laravel.com
下一步,您必须使用以下命令:
php artisan config:cache
php artisan cache:clear
我希望它有用。
答案 9 :(得分:1)
在 Laravel 7 中,您的.env文件应如下所示
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME="your username"
MAIL_PASSWORD="your password"
MAIL_ENCRYPTION=tls
#MAIL_FROM_ADDRESS=null
#MAIL_FROM_NAME="${APP_NAME}"
确保这两行都是 commentout ,就像这样...
#MAIL_FROM_ADDRESS=null
#MAIL_FROM_NAME="${APP_NAME}"
最终步骤:在终端中运行以下命令步骤以成功发送通知-
php artisan config:cache
php artisan cache:clear
php artisan config:clear
答案 10 :(得分:1)
也不要忘记清除配置缓存!这就是我面临的问题!
php artisan config:cache
答案 11 :(得分:0)
问题是.env文件中MAIL_FROM_ADDRESS的值为空。
解决方案1: 更改MAIL_FROM_ADRESS的值以匹配您的电子邮件地址(不要忘记重新运行服务器)。 解决方案2: 保持.env文件不变,但您需要更改mail.php(app / config / mail.php):
'from' => [
'address' => env('MAIL_FROM_ADDRESS','mail@test.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
]
收件人:
'from' => [
'address' => 'mail@test.com',
'name' => env('MAIL_FROM_NAME', 'Example'),
]
答案 12 :(得分:0)
错误仍然发生。设置并运行命令后
php artisan view:clear;
php artisan config:cache;
php artisan cache:clear;
php artisan route:cache;
检查代码
\Illuminate\Support\Facades\Mail::send('layouts.mail', [ 'content' => 'testmail'], function ($m) use ($msg2){
$m->from('abc@gmail.com', 'ABC');
// this line was env('MAIL_FROM_ADDRESS') ; cant read from .env
$m->to('xyz@gmail.com', 'XYZ')->subject('TestMailSubject!');
...
答案 13 :(得分:0)
如果您使用的是Gmail帐户,则设置现在有所不同。配置.env
:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=example@gmail.com
您还可以ssl加密,然后进行以下设置:
MAIL_ENCRYPTION=ssl
MAIL_PORT=465
设置所有内容后运行:
php artisan config:cache
您可能还需要选中https://myaccount.google.com/security上的选项“缺乏安全的应用程序访问权限”。
答案 14 :(得分:0)
您需要使用自己的值更改这些默认值
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
答案 15 :(得分:0)
请检查您的“MAIL_FROM_ADDRESS”不应为空。 然后使用 php artisan config:clear
为我工作。
答案 16 :(得分:0)
我不明白为什么,但我已经完成了上述所有操作,但没有任何改变。打开/关闭php artisan serve
。
我为解决这个问题所做的是通过执行 restart the PC
然后它运行顺利。
注意:
php artisan serve
仍在运行时休眠。我认为这可能会导致错误。答案 17 :(得分:0)
我做了以上所有操作,但仍然没有得到预期的结果。错误改为: 预期响应代码 250,但得到代码“530”,消息为“530 5.7.1 需要身份验证
从这里你需要做的就是通过运行重新启动开发服务器; php工匠服务
这对我来说效果很好。
答案 18 :(得分:-1)
文件:/bootstrap/cache/config.php
改变:
'mail' => array(
'driver' => 'smtp',
'host' => 'mail.yourserversiteemail.com',
'port' => '25',
'from' =>
array(
'address' => 'panel@yourserversiteemail.com',
'name' => 'sd',
),
'encryption' => 'tls',
'username' => 'yourUsername',
'password' => 'yourPass',
'sendmail' => '/usr/sbin/sendmail -bs',