试图让Laravel 5的电子邮件工作

我试图发送一个电子邮件到指定的用户通过input的url,但我收到以下错误:

AbstractSmtpTransport.php中的Swift_TransportException行383:预期的响应代码250,但代码为“530”,消息为“530 5.7.1需要validation

到目前为止,我只是试图让它与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 

我知道现在@ Vantheman6它已经在为你工作了,但是这对于别人来说是一样的。

我添加到我的.env文件我正在使用的邮件服务的详细信息。 所以请确保以下细节

 MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=MyUsername@gmail.com MAIL_PASSWORD=MyPassword 

在.env文件中是准确的。

注意:不要忘记在编辑.env文件后重新启动服务器,以便它将select放入的新数据。

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

我的.env文件configuration是这样的laravel 5.1

 MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=example@gmail.com MAIL_PASSWORD=**************** MAIL_ENCRYPTION=tls 

这里最重要的是我创build了gmail应用程序特定的密码(16位)。

我需要揭示一件事情,因为任何configuration都没有运气。 也就是说,每当我改变.env文件需要运行这个命令

 php artisan config:cache 

这是最重要的,因为如果没有这个命令,laravel会从caching中执行先前的设置。 这要求我花10个多小时才能弄明白。

您正在收到validation错误,因为您的configuration文件中的用户名和密码设置错误。

改变这个:

 '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')); 这样你就可以看到实际生成的configuration 。 这将帮助你发现这样的问题,并确切知道Laravel将尝试和使用的信息。 所以你可能想在你的testing路线上暂时停下来检查一下你有什么:

 Route::get('test', function() { dd(Config::get('mail')); }); 

最后我得到了! 只是分享,有更多的configuration,而不仅仅是.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也需要input地址和名称才能正常工作。

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

为了开发目的, 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)

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

如果你遇到同样的问题,并尝试一切在线,它不起作用,这可能是发送错误信息的configurationcaching文件。 你可以在bootstrap / cache / config.php中find它。 确保凭证在那里。 我花了一个星期才弄明白这一点。 我希望这有助于某个人。

它也发生在我身上。

这是因为当我们编辑.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”,它工作正常!

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

你可以通过做这个testing

 telnet <smtpServer> <smtpPort> 

你应该得到访问被拒绝的错误。

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

我有和你一样的问题,我只是把它工作。

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

希望对你有帮助 :)

  1. 你去Mailgun
  2. 点击授权收件人
  3. 添加您希望发送邮件的电子邮件地址。
  4. validation发送到邮件的消息。
  5. 布拉沃!你很好走。

以上解决scheme在localhost上都不适用于我。 我甚至允许从安全性较低的应用程序访问,允许通过显示解锁validation码进行访问,并将validation对等设置并validationSSL的对等名称为false。

最后,我使用了MailHog的开源SMTPtesting解决scheme。 步骤如下:

  1. 为您的操作系统下载最新版本的MailHog
  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检查发送的电子邮件