尝试让 Laravel 5 电子邮件正常工作

Trying to get Laravel 5 email to work

我试图通过输入 URL 向指定用户发送电子邮件,但出现以下错误:

Swift_TransportException in AbstractSmtpTransport.php line 383: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required

到目前为止,我只是想让它与 Gmail 一起使用。我怎样才能让它工作?

这是我目前所拥有的:mail.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

您收到身份验证错误,因为您配置文件中的用户名和密码设置错误。

改变这个:

'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'));
});

我知道它现在对你有用 @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多个小时才弄明白。

我终于明白了!只是为了分享,配置不仅仅是 .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,

我遇到了和你一样的问题,我刚弄好了。

首先,您需要仔细检查 .env 设置是否正确。这是我的设置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourusername
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls

请确保您的密码不在引号之间:)。

并且在 config/mail.php 中有以下内容,没有注释。

<?php

return [

'driver' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', '587'),
'from' => ['address' => 'yourusername', 'name' => 'yourname'],
'encryption' => env('MAIL_ENCRYPTION','tls'),
'username' => env('MAIL_USERNAME', 'username@gmail.com'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

希望对你有用:)

如果您遇到同样的问题并在线尝试所有方法但都不起作用,则可能是配置缓存文件发送了错误的信息。您可以在 bootstrap/cache/config.php 中找到它。确保凭据就在那里。我花了一个星期才弄明白。我希望有一天这会对某人有所帮助。

我遇到了同样的问题;我的 MAIL_ENCRYPTIONmail.php 上是 tls 但在 .env 文件上是 null
所以我将 null 更改为 tls 并且成功了!

出于开发目的 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)

添加完成后一定要重启服务器

我也遇到过。

It is because when we edit the .env file we need to restart the server. Just stop the current php artisan serve and start it once again. This will work for sure.

如果还是不行试试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,

希望对某人有所帮助。

  1. 你去 Mailgun
  2. 单击授权收件人
  3. 添加您希望向其发送邮件的电子邮件地址。
  4. 验证消息发送到邮箱。
  5. 太棒了!...你很高兴。

这只是意味着您的服务器无法访问 SMTP 服务器。

您可以通过以下方式进行测试:

telnet <smtpServer> <smtpPort>

您应该收到拒绝访问错误。

解决方法是只使用您的服务器可以访问的另一个 SMTP 服务器。

None 以上解决方案在本地主机上对我有用。我什至允许从安全性较低的应用程序进行访问,允许通过显示解锁验证码进行访问,并将验证对等点和验证对等点名称设置为 SSL 的 false。

最终还是使用了MailHog这个开源的SMTP测试方案。步骤如下:

  1. Download the latest version of MailHog for your OS
  2. 在您的 .env 文件中指定以下设置

MAIL_DRIVER=smtp

MAIL_HOST=127.0.0.1

MAIL_PORT=1025

MAIL_USERNAME=testuser

MAIL_PASSWORD=testpwd

MAIL_ENCRYPTION=null

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. 运行 MailHog的下载文件
  2. 发送电子邮件
  3. 转到 localhost:8025
  4. 查看已发送的电子邮件

清除缓存即可解决问题

php artisan config:cache

如果 dd(Config::get('mail')); 的结果为空,只需使用命令

php artisan config:clear

您应该重新启动服务器并运行这个命令:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache

应该可以。

以我为例: 重新启动服务器和 运行 php artisan config:clear 命令。

我对您的 .env 文件进行更改后的意见重新启动您的服务器并再次为该应用程序提供服务。只是为了确定实际错误。 php artisan 清除和缓存之后工作得很好。

就我而言,问题是我使用的来自 ('mymail@gmail.com') 的电子邮件与我在 .env 文件中配置为 MAIL_USERNAME.[=17= 的电子邮件不同]

下面是 .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');

始终确保

中使用的邮件

->from('mymail@gmail')

.env MAIL_USERNAME中配置的相同。

修改 .env 后确保 restart your server 如果您使用的是 laravel 7 及以下版本,因为在修改 .env 文件时它们不会自动重启。

如果您已完成上述所有操作但尚未解决,请尝试 运行 以下这些命令以清除系统中的任何缓存配置:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear