预期的响应代码220但得到了代码"",带有消息""在Laravel

时间:2015-09-21 11:00:06

标签: php email laravel swiftmailer

我正在使用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文件,其中包含一些数据。

如何解决此错误消息?

9 个答案:

答案 0 :(得分:76)

如果您未对用于发送gmail的{​​{1}}帐户(可以here)启用两步验证,则通常会出现此问题。首先,启用email,您可以找到足够的资源来启用两步验证。启用后,您必须创建two step verification。并使用app password文件中的app password。完成后,您的.env文件将类似于。

.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:cache,然后检查,电子邮件应该有效。

答案 1 :(得分:14)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

如果您使用的是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);

答案 5 :(得分:1)

我面临着同样的问题。在对Google和StackOverflow进行过多研究之后。我发现一个解决方案非常简单

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

VALINT  DESCRIPTION1
2       Default2Val
1       CustomOverride1

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

现在,您必须通过单击此链接https://myaccount.google.com/lesssecureapps

使用安全性较低的应用

答案 6 :(得分:0)

我按照sid的说法,更新后的环境是

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<mygmailaddress>
MAIL_PASSWORD=<gmailpassword>
MAIL_ENCRYPTION=tls

这没有两步验证就可以了。启用两步验证后,它对我不起作用。

答案 7 :(得分:0)

该错误消息表示没有响应,或者服务器无法连接。

以下设置对我有效:

'stream' => [
        'ssl' => [
            'allow_self_signed' => true,
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ]

请注意,我的SMTP设置为:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=[full gmail address]
MAIL_PASSWORD=[App Password obtained after two step verification]
MAIL_ENCRYPTION=ssl

答案 8 :(得分:0)

我遇到了这个问题,我检查了所有答案,但对我没有任何帮助,但是后来我重置了mail.php,却没有碰到它,而是从.env文件中设置了邮件服务器,因此效果很好,希望这可以为某人节省时间:)。