我正在尝试通过键入URL向指定用户发送电子邮件,但是收到以下错误:
Swift_TransportException 在 AbstractSmtpTransport.php第 383 行: 预期响应代码 250,但收到代码"530",消息为"530 5.7.1 需要身份验证
到目前为止,我只是想让它与Gmail一起工作。 我怎样才能让它工作?
这就是我到目前为止所拥有的:邮件.php
<?php
return [
'driver' => env('MAIL_DRIVER',' smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' =>"MyUsername@gmail.com" , 'name' => "example"],
'encryption' => 'tls',
'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
];
这是我在路线中拥有的:
Route::get('test', function() {
Mail::send('Email.test', [], function ($message) {
$message->to('example@gmail.com', 'HisName')->subject('Welcome!');
});
});
这是我的控制器中的内容:
class MailController extends Controller
{
public function Sending_Email()
{
$this->call('GET','Email.test');
return View('Email.test');
}
}
这是我的 .env 文件中的内容:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
>我知道它现在对你有用@Vantheman6但这是对我有用的,以防万一对其他人也是如此。
我将正在使用的邮件服务的详细信息添加到我的 .env 文件中。因此,请确保以下详细信息
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
在 .env 文件中是准确的。
注意:编辑 .env 文件后不要忘记重新启动服务器,以便它会选择您放入其中的新数据。
使用以下命令清除配置缓存:
php artisan config:cache
如果不重新启动服务器,.env 文件仍会继续向应用显示旧邮件数据,即使您进行了可能导致此错误的更改也是如此。
我的 .env 文件配置对于 laravel 5.1 是这样的
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls
这里最重要的是我创建了Gmail应用程序特定的密码(16位)。
我需要再透露一件事,因为任何配置都没有运气。也就是说,每当我更改.env文件时都需要运行此命令
php artisan config:cache
这是最重要的,因为如果没有这个命令,laravel会从它的缓存中执行以前的设置。这需要我10多个小时才能弄清楚。
您收到身份验证错误,因为配置文件中的用户名和密码设置错误。
更改此设置:
'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),
对此:
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
env
方法检查您的 .env 文件。在您的 .env 文件中,您调用这些MAIL_USERNAME
,因此这就是您需要传递给 env
方法的内容。
一个故障排除提示:添加dd(Config::get('mail'));
以便您可以看到实际生成的配置。这将帮助您发现此类问题,并确切地知道Laravel将尝试使用哪些信息。因此,您可能希望在测试路线中暂时停止它,以检查您拥有的内容:
Route::get('test', function()
{
dd(Config::get('mail'));
});
将通过清除缓存来解决
php artisan config:cache
终于我得到了!只是为了分享,有更多的配置不仅仅是.env
这是 .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=UserName@gmail.com
MAIL_PASSWORD=********
MAIL_ENCRYPTION=tls
config/mail.php还需要输入地址和名称才能工作。
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'Username@gmail.com' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
如果您遇到同样的麻烦并在线尝试所有内容但不起作用,则可能是配置缓存文件发送了错误的信息。你可以在bootstrap/cache/config.php中找到它。确保凭据就在那里。我花了一周的时间才弄清楚。我希望有一天这会帮助某人。
出于开发目的 https://mailtrap.io/为您提供了需要在.env文件中添加的所有设置。例如:
Host: mailtrap.io
Port: 25 or 465 or 2525
Username: cb1d1475bc6cce
Password: 7a330479c15f99
Auth: PLAIN, LOGIN and CRAM-MD5
TLS: Optional
否则,出于实施目的,您可以从邮件中获取要添加到.env文件中的smtp凭据(如gmail n all)
添加后,请确保重新启动服务器
它也发生在我身上。
这是因为当我们编辑
.env
文件时,我们需要重新启动服务器。只需停止当前php artisan serve
并再次启动它。这肯定会起作用。
如果仍然不起作用,请尝试执行php artisan config:cache
供将来来这里的人参考。 在您运行此处第三个答案中给出的命令之后(我现在使用的是 Laravel 5.3)。
php artisan config:cache
您可能会遇到此问题:
[ReflectionException]
Class view does not exist
在这种情况下,您需要手动将其添加回 app.php 文件下的提供商列表。前往: app->config->app.php->'providers[]'
并添加它,如下所示:
Illuminate'View'ViewServiceProvider::class,
希望对某人有所帮助。
我遇到了同样的问题;我的MAIL_ENCRYPTION
mail.php
tls
,但它.env
文件中null
。
所以我把null
改成了tls
,它奏效了!
以上解决方案都不适用于本地主机。我什至允许从安全性较低的应用程序访问,允许通过显示解锁验证码进行访问,并将验证对等体和验证对等体名称设置为 false 以用于 SSL。
最终,我使用了MailHog的开源SMTP测试解决方案。步骤如下:
- 下载适用于您的操作系统的最新版本的 MailHog
- 在 .env 文件中指定以下设置
MAIL_DRIVER=SMTP
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=测试用户
MAIL_PASSWORD=testpwd
MAIL_ENCRYPTION=空
MAIL_FROM_ADDRESS=theaddress@youwant.com
- 运行下载的 MailHog 文件
- 发送电子邮件
- 通过转到本地主机检查已发送的电子邮件:8025
您应该重新启动服务器并运行以下命令:
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache
这应该行得通。
这只是意味着您的服务器无法访问SMTP服务器。
您可以通过执行以下操作来测试这一点:
telnet <smtpServer> <smtpPort>
应收到"拒绝访问"错误。
解决方案是仅使用服务器可以访问的另一个SMTP服务器。
如果dd(Config::get('mail'));
的结果为空,只需使用命令
php artisan config:clear
我的意见是在您的 .env 文件进行更改后重新启动您的服务器并再次提供应用程序。只是为了确定实际错误。php工匠清除和缓存之后工作得很好。
就我而言,问题是我使用的电子邮件 from('mymail@gmail.com')与我在 .env 文件中配置为MAIL_USERNAME的电子邮件不同。
下面是 .env 中邮件配置的代码片段
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=anothermail@gmail.com
MAIL_PASSWORD=strongpassword
MAIL_ENCRYPTION=tls
在邮件发送方法中,我已设置
->from('mymail@gmail.com')->to('myfriend@gmail.com');
始终确保邮件中使用的
->发件人("mymail@gmail")
与.env MAIL_USERNAME
中配置的相同。
修改.env
请确保在使用laravel 7及更低版本的情况下restart your server
,因为在修改.env文件时它们不会自动重新启动。
如果您已完成上述所有操作但尚未解决,请尝试运行以下命令以清除系统中的任何缓存配置:
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
就我而言:重新启动服务器并运行php artisan config:clear
命令。
- 你去邮件枪
- 单击授权收件人
- 添加您希望向其发送邮件的电子邮件地址。
- 验证发送到邮件的邮件。
- 太棒了...你很好去。