Laravel Homestead Swift 没有发件人地址无法发送消息
Laravel Homestead Swift Cannot send message without a sender address
当我尝试发送密码重置邮件时,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'),
在您的 .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
另请注意:
- 端口 465 用于 Gmail。如果不行,可以用25。
mail.php
文件位于 /app/config/mail.php
(如 OP 所述)。
.env
文件位于项目的根目录下。
- Mailtrap.io是一个测试SMTP的服务。它并不真正发送电子邮件。
正如 Viktorminator 提到的:
考虑创建应用密码,而不是使用您通常的通行证来满足此需求。 Link 用于创建密码 myaccount.google.com/apppasswords
确保您已在 app/config/mail 中设置 'from'。php
'from' => ['address' => 'myname@gmail.com', 'name' => 'myname']
它将解决问题。
如果您无权访问 .env 文件,您可以向 app/config/mail.php 上的那些 env 调用添加默认值,如下所示:
'from' => ['address' => env('MAIL_FROM_EMAIL','do_not_reply@email.com'), 'name' => env('MAIL_FROM_NAME','SpongeBob')],
此方法将尝试从 .env 文件中获取数据,如果那里没有任何内容,它将默认为您设置的任何内容。
文件:/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',
错误仍然发生。在设置和 运行 命令后
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!');
...
可能有人在用laravel 6
它的问题是 "Cannot send message without a sender address" 所以在 .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
我刚刚在 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}"
别忘了清除配置缓存!这是我面临的问题!
php artisan config:cache
问题是 .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'),
]
我已经尝试了这里的所有解决方案,但直到我 运行 这三个命令才起作用
php artisan config:clear
php artisan cache:clear
php artisan config:cache
在 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
确保 env .file 中的 MAIL_FROM_ADDRESS 不为空。
MAIL_FROM_ADDRESS=test@laravel.com
下一步你必须使用这些命令:
php artisan config:cache
php artisan cache:clear
希望有用。
LARAVEL 7 *没有发件人地址无法发送消息 *
转到位于文件夹根目录下的 .env
文件
如果您还使用 smpt.mailtrap.io
as 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
如果您已有帐户,请立即注册或登录。
然后单击收件箱,然后单击 select 演示收件箱,您会在其中找到集成下拉菜单,然后 select 用于 Laravel,它将为您提供满足您要求的用户名和密码.env
文件。
然后将信息保存在您的 .env
文件中用于邮件配置。
现在最重要的部分是你 运行 终端中的这两个命令行。
运行 php artisan serve
再一次
运行 php artisan config:clear
然后执行您的流程并查看 mailtrap 收件箱。
对我来说它是这样工作的。
如果您使用的是 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 上选中“不太安全的应用程序访问”选项。
您需要使用自己的值更改这些默认值
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
通过执行以下操作设法解决此问题
转到 .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
请检查您的“MAIL_FROM_ADDRESS”不应为空。
然后使用 php artisan config:clear
对我有用。
我不明白为什么,但我已经做了以上所有事情,没有任何改变。切换 on/off php artisan serve
.
我解决这个问题的方法是restart the PC
然后运行顺利
注:
- 我正在使用 Ubuntu OS。
- 有时我的 PC 在
php artisan serve
仍然 运行 时处于睡眠状态。我认为这可能会导致错误。
我做了以上所有操作,但仍然没有得到预期的结果。错误改为:
预期响应代码 250 但得到代码“530”,消息“530 5.7.1 需要身份验证
从这里开始,您需要做的就是通过 运行 重新启动开发服务器;
php artisan 服务
这对我来说效果很好。
以防万一您在部署阶段遇到此挑战并在尝试上述所有步骤后遇到相同的错误,请确保您没有在 .env 文件中复制 MAIL_FROM_ADDRESS。如果你有一个被注释掉了,把它也删除。
当我尝试发送密码重置邮件时,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'),
在您的 .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
另请注意:
- 端口 465 用于 Gmail。如果不行,可以用25。
mail.php
文件位于/app/config/mail.php
(如 OP 所述)。.env
文件位于项目的根目录下。- Mailtrap.io是一个测试SMTP的服务。它并不真正发送电子邮件。
正如 Viktorminator 提到的: 考虑创建应用密码,而不是使用您通常的通行证来满足此需求。 Link 用于创建密码 myaccount.google.com/apppasswords
确保您已在 app/config/mail 中设置 'from'。php
'from' => ['address' => 'myname@gmail.com', 'name' => 'myname']
它将解决问题。
如果您无权访问 .env 文件,您可以向 app/config/mail.php 上的那些 env 调用添加默认值,如下所示:
'from' => ['address' => env('MAIL_FROM_EMAIL','do_not_reply@email.com'), 'name' => env('MAIL_FROM_NAME','SpongeBob')],
此方法将尝试从 .env 文件中获取数据,如果那里没有任何内容,它将默认为您设置的任何内容。
文件:/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',
错误仍然发生。在设置和 运行 命令后
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!');
...
可能有人在用laravel 6
它的问题是 "Cannot send message without a sender address" 所以在 .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
我刚刚在 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}"
别忘了清除配置缓存!这是我面临的问题!
php artisan config:cache
问题是 .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'),
]
我已经尝试了这里的所有解决方案,但直到我 运行 这三个命令才起作用
php artisan config:clear
php artisan cache:clear
php artisan config:cache
在 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
确保 env .file 中的 MAIL_FROM_ADDRESS 不为空。
MAIL_FROM_ADDRESS=test@laravel.com
下一步你必须使用这些命令:
php artisan config:cache
php artisan cache:clear
希望有用。
LARAVEL 7 *没有发件人地址无法发送消息 *
转到位于文件夹根目录下的 .env
文件
如果您还使用 smpt.mailtrap.io
as 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
如果您已有帐户,请立即注册或登录。
然后单击收件箱,然后单击 select 演示收件箱,您会在其中找到集成下拉菜单,然后 select 用于 Laravel,它将为您提供满足您要求的用户名和密码.env
文件。
然后将信息保存在您的 .env
文件中用于邮件配置。
现在最重要的部分是你 运行 终端中的这两个命令行。
运行 php artisan serve
再一次
运行 php artisan config:clear
然后执行您的流程并查看 mailtrap 收件箱。 对我来说它是这样工作的。
如果您使用的是 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 上选中“不太安全的应用程序访问”选项。
您需要使用自己的值更改这些默认值
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
通过执行以下操作设法解决此问题
转到 .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
请检查您的“MAIL_FROM_ADDRESS”不应为空。 然后使用 php artisan config:clear
对我有用。
我不明白为什么,但我已经做了以上所有事情,没有任何改变。切换 on/off php artisan serve
.
我解决这个问题的方法是restart the PC
然后运行顺利
注:
- 我正在使用 Ubuntu OS。
- 有时我的 PC 在
php artisan serve
仍然 运行 时处于睡眠状态。我认为这可能会导致错误。
我做了以上所有操作,但仍然没有得到预期的结果。错误改为: 预期响应代码 250 但得到代码“530”,消息“530 5.7.1 需要身份验证
从这里开始,您需要做的就是通过 运行 重新启动开发服务器; php artisan 服务
这对我来说效果很好。
以防万一您在部署阶段遇到此挑战并在尝试上述所有步骤后遇到相同的错误,请确保您没有在 .env 文件中复制 MAIL_FROM_ADDRESS。如果你有一个被注释掉了,把它也删除。