试着让 Laravel 5号的邮件工作

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

AbstractSmtpTransportation. php 中的 Swift _ Transport 异常第383行: 预计响应代码250,但得到的代码“530”,与消息“5305.7 需要认证

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

由于配置文件中的用户名和密码设置错误,您将收到一个身份验证错误。

改变这一点:

'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 文件将继续向应用程序显示旧的邮件数据,即使您已经做了可能导致此错误的更改。

对于 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

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

我需要再透露一件事,因为没有任何运气配置。也就是说,每当我改变的时候。Env 文件需要运行这个命令

php artisan config:cache

这是最重要的,因为如果没有这个命令,laravel 将从它的缓存中执行以前的设置。我花了十多个小时才弄明白。

最后我得到了! 只是分享,有更多的配置不只是

这是 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

否则,出于实现目的,您可以获得要添加的 smtp 凭据。来自邮件的 env 文件(如 gmail n all)

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

我也经历过。

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

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

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

php artisan config:cache

你可能会遇到这个问题:

[ReflectionException]
Class view does not exist

在这种情况下,您需要将其手动添加回 app.php 文件下的提供者列表: 然后添加它,像这样:

Illuminate\View\ViewServiceProvider::class,

希望能帮到某人。

  1. 你去找邮枪
  2. 单击“授权收件人”
  3. 添加您希望发送邮件的电子邮件地址。
  4. 验证发送到邮件的邮件。
  5. 好极了! ... 你可以走了。

这仅仅意味着您的服务器不能访问 SMTP 服务器。

你可以这样来测试:

telnet <smtpServer> <smtpPort>

您应该会得到拒绝访问错误。

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

以上的解决方案在本地主机上都不管用。我甚至允许从不太安全的应用程序访问,允许通过显示解锁验证码访问,并为 SSL 设置验证对等点和验证对等点名称为 false。

最后,我使用了 MailHog 的开源 SMTP 测试解决方案:

  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. 检查通过本地主机发送的电子邮件: 8025

这个问题可以通过清除缓存来解决

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 的工匠明确和缓存后来的工作相当不错。

对于我来说,问题在于我使用的电子邮件(“ mymail@gmail.com”)与我在。作为 MAIL _ USERNAME 的 env 文件。

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

中使用的邮件

- > 来自(mymail@gmail)

.env MAIL_USERNAME中的配置相同。

修改您的 .env后,确保在您使用幼虫7及以下的情况下 restart your server,因为它们没有自动重新启动。修改了 env 文件。

如果你已经做了以上所有的事情,但是还没有解决问题,试着运行下面的命令来清除系统中的任何缓存配置:

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