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

时间:2015-03-17 13:53:15

标签: php laravel laravel-5 email-integration

我尝试通过输入网址向指定用户发送电子邮件,但我收到以下错误:

  

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,
    ];

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

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

18 个答案:

答案 0 :(得分:227)

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

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

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
.env文件中的

是准确的。

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

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

答案 1 :(得分:46)

我的.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个小时才能搞清楚。

答案 2 :(得分:32)

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

改变这个:

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

答案 3 :(得分:13)

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

php artisan config:cache

答案 4 :(得分: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还需要输入地址&amp;它起作用的名称。

'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,

答案 5 :(得分: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

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

添加后请务必重启服务器

答案 6 :(得分:8)

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

答案 7 :(得分:7)

它也发生在我身上。

  

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

如果仍然无效,请尝试php artisan config:cache

答案 8 :(得分:4)

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

php artisan config:cache

您可能会遇到此问题:

[ReflectionException]
Class view does not exist

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

Illuminate\View\ViewServiceProvider::class,

希望这有助于某人。

答案 9 :(得分:3)

我有同样的问题; MAIL_ENCRYPTION tls mail.php null .envnull文件tls为{{1}}。 所以我将{{1}}更改为{{1}}并且有效!

答案 10 :(得分:2)

这仅表示您的服务器无法访问SMTP服务器。

您可以通过执行以下操作来测试:

telnet <smtpServer> <smtpPort>

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

解决方案是使用服务器可以访问的另一台SMTP服务器。

答案 11 :(得分:2)

上述解决方案都不适用于localhost。我甚至允许从不太安全的应用程序访问,允许通过显示解锁验证码进行访问,并设置验证对等方并验证SSL的对等名称为false。

最后,我使用了MailHog的开源SMTP测试解决方案。步骤如下:

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

    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. 查看已发送的电子邮件

答案 12 :(得分:1)

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

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

应该可以。

答案 13 :(得分:0)

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

php artisan config:clear

答案 14 :(得分:0)

在对.env文件进行更改后,我的意见是重新启动服务器并再次提供该应用程序。只是为了确保实际错误。 php artisan清除并随后进行缓存非常好。

答案 15 :(得分:-1)

我和你有同样的问题,我只是让它发挥作用。

首先,您需要仔细检查.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,

];

希望它适合你:)

答案 16 :(得分:-1)

就我而言: 重新启动服务器并运行php artisan config:clear命令。

答案 17 :(得分:-2)

  1. 你去了Mailgun
  2. 点击授权收件人
  3. 添加您希望发送邮件的电子邮件地址。
  4. 验证发送给邮件的邮件。
  5. Bravo!...你很高兴。