预期的响应代码220但是在Laravel中得到了代码“”,并带有消息“”

问题描述 投票:48回答:7

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

'driver' => 'sendmail',
'host' => 'smtp.gmail.com',
'port' => 587,
'from' => array('address' => '[email protected]', '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('[email protected]', 'Sender Name')->subject('Welcome!');
});

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

Swift_TransportException

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

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

如何解决此错误消息?

php email laravel swiftmailer
7个回答
79
投票

如果您没有为用于发送gmailhere帐户(可以使用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:cachephp artisan config:clear,然后检查,电子邮件应该工作。


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


3
投票

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

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

1
投票

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


1
投票

如果您正在使用Swift Mailer:请确保您的$ transport变量类似于以下内容,基于我已经完成的测试,该错误是由ssl和端口配置错误引起的。注意:您必须在传输变量中包含'ssl'或'tls'。

示例代码:

// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
  ->setUsername([email protected])
  ->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(['[email protected]' => 'A Name'])
  ->setTo(['[email protected]' => 'A Name'])
  ->setBody('your message body')
  ;

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

0
投票

我按照sid的说法更新了我的环境

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

没有2步验证,这确实有效。启用2步验证后,它对我不起作用。


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
© www.soinside.com 2019 - 2024. All rights reserved.