试图让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, ];
希望对你有帮助 :)
- 你去Mailgun
- 点击授权收件人
- 添加您希望发送邮件的电子邮件地址。
- validation发送到邮件的消息。
- 布拉沃!你很好走。
以上解决scheme在localhost上都不适用于我。 我甚至允许从安全性较低的应用程序访问,允许通过显示解锁validation码进行访问,并将validation对等设置并validationSSL的对等名称为false。
最后,我使用了MailHog的开源SMTPtesting解决scheme。 步骤如下:
- 为您的操作系统下载最新版本的MailHog
- 在.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
- 运行下载的MailHog文件
- 发电子邮件
- 通过转到localhost:8025检查发送的电子邮件