Php 预期响应代码为220,但得到代码“&引用;,带“信息”&引用;在拉维尔

Php 预期响应代码为220,但得到代码“&引用;,带“信息”&引用;在拉维尔,php,email,laravel,swiftmailer,Php,Email,Laravel,Swiftmailer,我正在使用Laravel邮件功能发送电子邮件。下面是我的app/config/mail.php文件设置 'driver' => 'sendmail', 'host' => 'smtp.gmail.com', 'port' => 587, 'from' => array('address' => 'email@gmail.com', 'name' => 'MyName'), 'encryption' => 'tls', 'username' => '

我正在使用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,
MAIL_PORT=587
MAIL_ENCRYPTION= tls  
控制器邮件方法

//Send Mail     
Mail::send('sendMail', array('key' => 'value'), function($message)
{
    $message->to('EmailId@hotmail.com', 'Sender Name')->subject('Welcome!');
});
当我运行代码时,它会显示以下错误消息:

Swift_运输例外

预期响应代码为220,但获得代码“”,消息为“”

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


如何解决此错误消息?

当您不为用于发送
电子邮件的
gmail
帐户启用两步验证(可以完成)时,通常会出现此问题。因此,首先,启用两步验证
,您可以找到大量资源来启用两步验证。启用后,您必须创建一个
应用程序密码
。并使用
.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

执行此操作后,运行
php artisan config:cache
php 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)

有关其他gmail设置的信息,请参见。。。将sendmail参数从-bs更改为-t

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

我按照sid做了,更新后我的环境是

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<mygmailaddress>
MAIL_PASSWORD=<gmailpassword>
MAIL_ENCRYPTION=tls
MAIL\u驱动程序=smtp
MAIL_HOST=smtp.gmail.com
邮件端口=587
邮箱用户名=
邮箱密码=
邮件加密=tls

这在没有两步验证的情况下确实有效。启用两步验证后,它对我不起作用。

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

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

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

以下设置在我的端起作用:

'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

我也面临同样的问题。在对谷歌和StackOverflow做了太多研究之后。我发现解决办法很简单

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

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


现在,您必须通过以下链接访问不太安全的应用程序

我遇到了这个问题,我检查了所有答案,但没有任何结果,但是我重置了mail.php,没有触摸它,并从.env文件设置了邮件服务器,它工作得非常好,希望这能为某人节省时间:)。

您是否为您使用的gmail帐户启用了两步验证?对于任何使用SELinux的人:检查SELinux audit…我到处都找了,找不到解决方案,但您完全救了我的命!!。非常感谢!!。我投票支持你的答案!美好的它正在工作。我认为这是这个错误的正确答案。我对Yii2和mailer也有同样的问题。对我来说,关键是用电话号码为gmail账户背书。我没有做这里建议的所有事情,只是遵循了mailer类实现的yii2文档和电话号码链接。stream\u socket\u enable\u crypto():SSL操作失败,代码为1。OpenSSL错误消息:\n错误:14090086:SSL例程:ssl3\u获取\u服务器\u证书:证书验证失败谢谢!我认为只允许不太安全的应用程序访问将使它工作,但只是浪费我的时间!SSL现在被认为是不安全的:最好遵循“tls”的答案。@JanŻankowski True。我编辑了答案。您还可以找到其他设置谢谢,这很有效!您是如何想到这个主意的?您需要提供更多信息,说明我们应该在Swiftmail文档中的何处添加或更改此内容:您可以在命令行标志指定的两种不同模式下运行Sendmail传输:“-bs”在SMTP模式下运行,因此理论上它将与SMTP传输类似。“-t”在管道模式下运行,无反馈,但理论上更快,但不建议。您可以将Sendmail传输视为一种异步SMTP传输——不过,如果您遇到传递失败的问题,您应该尝试改用SMTP传输。Swift Mailer在这里不做这项工作,它只是将工作传递给其他人(即sendmail)。如果使用“sendmail-t”,在失败反弹之前,您不会意识到任何失败(即send()将始终返回100%成功)。
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