试图让Laravel 5电子邮件发挥作用

Van*_*an6 145 php email-integration laravel laravel-5

我正在尝试通过键入URL向指定用户发送电子邮件,但是我收到以下错误:

AbstractSmtpTransport.php第383行中的Swift_TransportException:预期响应代码250但得到代码"530",消息"530 5.7.1需要验证

到目前为止,我只是想让它与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,
    ];
Run Code Online (Sandbox Code Playgroud)

这就是我在路线中所拥有的:

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('example@gmail.com', 'HisName')->subject('Welcome!');
    });
});
Run Code Online (Sandbox Code Playgroud)

这就是我在我的控制器中所拥有的:

class MailController extends Controller
{
    public function Sending_Email()
    {
        $this->call('GET','Email.test');
        return View('Email.test');
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我的.env文件中的内容:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Run Code Online (Sandbox Code Playgroud)

Ose*_*ian 236

我知道它现在为你工作@ Vantheman6但这对我有用,以防其他人也一样.

我在.env文件中添加了我正在使用的邮件服务的详细信息.因此,请确保以下详细信息

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Run Code Online (Sandbox Code Playgroud)

在.env文件中是准确的.

注意:编辑.env文件后,不要忘记重新启动服务器,以便选择放在那里的新数据.

如果不重新启动服务器,即使您进行了可能导致此错误的更改,.env文件仍将继续向应用程序显示旧邮件数据.

  • 哇,'注意'救了我.我不知道ENV vars在启动时被缓存了! (58认同)
  • 如果您之前使用`php artisan config:cache`缓存了配置,那么重新启动服务器将无法获取更新的配置.尝试再次运行`php artisan config:cache` (20认同)
  • @mrwaim,我认为重新启动服务器正是我在笔记中指定的,除非我没有得到你所暗示的内容. (2认同)

Ami*_*mir 50

对于laravel 5.1,我的.env文件配置是这样的

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls
Run Code Online (Sandbox Code Playgroud)

这里最重要的是我创建了gmail应用程序专用密码(16位).

我需要透露一件事,因为任何配置都没有运气.也就是说,每当我更改.env文件时都需要运行此命令

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

这是最重要的,因为如果没有这个命令,laravel会从它的缓存执行以前的设置.我需要超过10个小时才能搞清楚.

  • 由于你关于`php artisan config:cache`的说明而被推翻 (4认同)

jsz*_*ody 33

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

改变这个:

'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),
Run Code Online (Sandbox Code Playgroud)

对此:

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
Run Code Online (Sandbox Code Playgroud)

env方法检查.env文件.在你的.env文件中,你调用它们MAIL_USERNAME,这就是你需要传递给env方法的东西.

一个故障排除提示:添加dd(Config::get('mail'));以便您可以看到实际生成的配置.这将帮助您发现这样的问题,并确切地知道Laravel将尝试和使用哪些信息.因此,您可能希望暂时在测试路径中停止该操作以检查您拥有的内容:

Route::get('test', function()
{
    dd(Config::get('mail'));
});
Run Code Online (Sandbox Code Playgroud)


zai*_*ori 13

问题将通过清除缓存来解决

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)


小智 10

终于有了!只是为了分享,有更多的配置而不仅仅是.env

这是.env

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls
Run Code Online (Sandbox Code Playgroud)

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,
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您遇到同样的麻烦并在线尝试所有内容并且它不起作用,则可能是发送错误信息的配置缓存文件.您可以在bootstrap/cache/config.php中找到它.确保凭据正确.我用了一个星期来搞清楚这一点.我希望有一天这会有所帮助.


Bhu*_*tha 9

出于开发目的,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
Run Code Online (Sandbox Code Playgroud)

否则出于实现目的,您可以从邮件中获取要添加到.env文件中的smtp凭据(例如gmail n all)

添加后,请确保重新启动服务器


Adv*_*ith 7

它也发生在我身上.

这是因为当我们编辑.env文件时,我们需要重新启动服务器.只需停止当前php artisan serve并再次启动它.这肯定会起作用.

如果仍然没有工作尝试做 php artisan config:cache


Gab*_*Mic 5

供以后来这里的人参考。在您运行此处第三个答案中给出的命令后(我现在使用的是 Laravel 5.3)。

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

你可能会遇到这个问题:

[ReflectionException]
Class view does not exist
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要手动将其添加回 app.php 文件下的提供程序列表中。转到: app->config->app.php->'providers[]'并添加它,如下所示:

Illuminate\View\ViewServiceProvider::class,
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。