预期响应代码 220 但在 Laravel 中得到代码“”和消息“”

Expected response code 220 but got code "", with message "" in Laravel

我正在使用 Laravel 邮件功能发送电子邮件。以下是我的app/config/mail.php文件设置。

'driver' => 'sendmail',
'host' => 'smtp.gmail.com',
'port' => 587,
'from' => array('address' => 'email@gmail.com', 'name' => 'MyName'),
'encryption' => 'tls',
'username' => 'myUsername',
'password' => "password",
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

控制器邮件方法

//Send Mail     
Mail::send('sendMail', array('key' => 'value'), function($message)
{
    $message->to('EmailId@hotmail.com', 'Sender Name')->subject('Welcome!');
});

当我 运行 代码时,它给我以下错误消息:

Swift_TransportException

Expected response code 220 but got code "", with message ""

我在视图中创建了一个 SendMail.php 文件,其中包含一些数据。

如何解决此错误消息?

当您没有为用于发送 emailgmail 帐户(可以完成 here)启用两步验证时,通常会出现此问题。因此,首先,启用 two step verification,您可以找到大量资源来启用两步验证。启用它后,您必须创建一个 app password。并在 .env 文件中使用 app password。完成后,您的 .env 文件将类似于

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=tls

和你的mail.php

<?php

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.gmail.com'),
    'port' => env('MAIL_PORT', 587),
    'from' => ['address' => '<<your email>>', 'name' => '<<any name>>'],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,

];

这样做之后,运行 php artisan config:cachephp artisan config:clear,然后检查,电子邮件应该可以工作。

在我的例子中,我必须设置

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465           <<<<<<<------------------------- (FOCUS THIS)
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>

MAIL_ENCRYPTION= ssl    <<<<<<<------------------------- (FOCUS THIS)

开始工作.. 可能会有用。 其余代码与@Sid 所说的相同。

而且我认为编辑环境文件和 app/config/mail.php 是不必要的。只用一种方法。

根据@Zan的评论编辑

如果您需要启用 tls 保护,请使用以下设置。

MAIL_PORT=587
MAIL_ENCRYPTION= tls  

有关其他一些 gmail 设置,请参阅 here

是什么帮助了我...将 sendmail 参数从 -bs 更改为 -t。

'sendmail' => '/your/sendmail/path -t',

对我来说问题是端口。我首先错误地使用了端口 465,它适用于 SSL 但不适用于 TLS。所以关键是将端口更改为 587。

如果您使用的是 Swift 邮件程序: 请确保您的 $transport 变量类似于以下内容, 根据我所做的测试,该错误是由 ssl 和端口配置错误引起的。 注意:您必须在传输变量中包含 'ssl' 或 'tls'。

示例代码:

// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
  ->setUsername(you@example.com)
  ->setPassword(password)
;

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);

// Create a message
$message = (new Swift_Message('News Letter Subscription'))
  ->setFrom(['app@example.com' => 'A Name'])
  ->setTo(['someone@example.com' => 'A Name'])
  ->setBody('your message body')
  ;

// Send the message
$result = $mailer->send($message);

我遇到了同样的问题。在对 Google 和 Whosebug 进行了过多研究之后。我找到了一个非常简单的解决方案

首先,你需要这样设置环境

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

您必须更改您的 Gmail 地址和密码

现在您必须按照此 link https://myaccount.google.com/lesssecureapps

来使用不太安全的应用程序