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

Posted

技术标签:

【中文标题】预期响应代码 220,但在 Laravel 中得到代码“”,消息“”【英文标题】:Expected response code 220 but got code "", with message "" in Laravel 【发布时间】:2015-12-18 01:16:41 【问题描述】:

我正在使用 Laravel Mail 功能发送电子邮件。以下是我的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

预期的响应代码为 220,但得到代码“”,带有消息“”

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

如何解决此错误消息?

【问题讨论】:

您使用的 gmail 帐户是否启用了两步验证? 对于任何使用 SELinux 的人:检查 SELinux 审计... 【参考方案1】:

当您没有为用于发送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,然后检查,电子邮件应该可以工作。

【讨论】:

我找遍了所有地方都找不到解决方案,但你完全救了我的命!!。太感谢了!!。我投票赞成你的答案! 不错!它现在正在工作。我认为这是这个错误的正确答案。 我在 Yii2 和 mailer 上遇到了同样的问题。对我来说,关键是使用电话号码认可 gmail 帐户。我没有做这里建议的所有事情,只是按照邮件类实现的 yii2 文档和电话号码链接这个东西。 stream_socket_enable_crypto():SSL 操作失败,代码为 1。OpenSSL 错误消息:\n错误:14090086:SSL 例程:ssl3_get_server_certificate:证书验证失败 非常感谢!我认为只允许不太安全的应用程序访问会使其正常工作,但只是浪费我的时间!【参考方案2】:

在我的情况下,我必须设置

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  

请参阅here 了解其他一些 gmail 设置

【讨论】:

SSL 现在被认为是不安全的:entrust.com/lp/poodle-ssl-3-0-fallback-vulnerability 最好遵循“tls”的答案。 @JanŻankowski 是的。我编辑了答案。您还可以找到其他设置【参考方案3】:

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

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

【讨论】:

谢谢,成功了!你是怎么想到这个主意的? 您需要提供更多信息,我们应该在哪里添加或更改此内容 来自 Swiftmail 文档:您可以在命令行标志指定的两种不同模式下运行 Sendmail 传输:“-bs”在 SMTP 模式下运行,因此理论上它的行为类似于 SMTP 传输。 “-t”在管道模式下运行,没有反馈,但理论上更快,但不建议这样做。您可以将 Sendmail 传输视为一种异步 SMTP 传输——尽管如果您遇到传递失败的问题,您应该尝试使用 SMTP 传输。 Swift Mailer 并没有在这里做这项工作,它只是将工作传递给其他人(即 sendmail)。 如果使用 'sendmail -t' 你不会意识到任何失败,直到它们反弹(即 send() 将始终返回 100% 成功)。【参考方案4】:

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

【讨论】:

【参考方案5】:

如果您使用的是 Swift Mailer: 请确保您的 $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);

【讨论】:

【参考方案6】:

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

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

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 地址和密码

现在您必须通过此链接https://myaccount.google.com/lesssecureapps 使用不太安全的应用程序

【讨论】:

以上是关于预期响应代码 220,但在 Laravel 中得到代码“”,消息“”的主要内容,如果未能解决你的问题,请参考以下文章

预期响应代码 250,但得到代码“550”,消息“550 5.7.1 Relaying denied”

预期 BEGIN_OBJECT 但在第 1 行第 1 列路径为 STRING - Laravel 到改造 2

预期响应代码 250,但得到代码“”,带有消息“”

预期开始数组,但在改造中出现开始对象错误

预期的数组,但在 Jest 中收到了数组

无法在 laravel 5.3 中发送密码重置链接?