预期响应代码 220,但得到代码“”和消息“”

Posted

技术标签:

【中文标题】预期响应代码 220,但得到代码“”和消息“”【英文标题】:Expected response code 220 but got code "" with message "" 【发布时间】:2017-08-03 21:18:25 【问题描述】:

每次我在 Laravel 应用程序上提交联系表时,我都会在标题中收到错误消息。我遵循了this discussion 中的建议,但即使在php artisan cache:clearphp artisan config:cache 之后也没有效果。以下是相关代码:

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=username@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=ssl

config/mail.php

<?php

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.gmail.org'),
    'port' => env('MAIL_PORT', 587),
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),    
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

我从文档中得到的印象是,除非没有提供其他发件人地址,否则不会触发全局“发件人”,但在我的邮件控制器中,我将提供给联系表的地址指定为“发件人” ,'这是一个冲突点吗?似乎不是来自错误消息的详细信息。

因为联系表单不是一个独特的视图,而是主页视图的底部,所以Controller函数存在于PageController

public function postContact(Request $request) 
    $this->validate($request, [

      'email' => 'required|email',
      'subject' => 'required|min:3',
      'message' => 'required|min:10'
    ]);

    $data = array(
      'email' => $request->email,
      'subject' => $request->subject,
      'mailbody' => $request->message
    );

    Mail::send('emails.contact', $data, function($message) use ($data) 
      $message->from($data['email']);
      $message->to('username@gmail.com');
      $message->subject($data['subject']);
    );
  

【问题讨论】:

将端口从 465 更改为 587 和 MAIL_ENCRYPTION= ssl。还允许从谷歌设置中降低谷歌应用的安全性。 这摆脱了旧的错误,但现在我在 StreamBuffer.php 第 268 行收到“Swift_TransportException:无法与主机 smtp.gmail.com [#0] 建立连接” 查看这个答案***.com/questions/32693528/… 这实际上是我在上面的原始问题中链接的答案,因为我已经阅读了它,应用了建议,但没有让它们起作用。 【参考方案1】:

我认为您应该将邮件发件人 (MAIL_FROM_ADDRESS) 定义为您要用来发送电子邮件的 gmail。

例如,如果您在.envMAIL_USERNAMEexample@gmail.com,您应该将您的MAIL_FROM_ADDRESS(或者当然$mail-&gt;from())定义为example@gmail .com.

我认为 gmail 不允许您以其他用户(其他地址)的身份发送电子邮件。

【讨论】:

【参考方案2】:

Similar problem 587端口

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=username@gmail.com
MAIL_PASSWORD=mypassword

【讨论】:

【参考方案3】:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=address@gmail.com
MAIL_PASSWORD=secreat
MAIL_ENCRYPTION=ssl

在您的 .env 文件中更新上述代码,然后在终端中运行这些命令

    composer dump-autoload

    php artisan serve

【讨论】:

【参考方案4】:

我遇到了同样的错误。当我更改 EMAIL_ENCRYPTION 时它工作正常 之前是'encryption' =&gt; env('MAIL_ENCRYPTION', 'tps'), 我改成'encryption' => env('MAIL_ENCRYPTION', ''),

【讨论】:

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

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

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

预期响应代码 250,但得到代码“535”,消息“535-5.7.8 用户名和密码不被接受

预期响应代码“250/251/252”,但得到代码“530”,消息“需要 530 SMTP 身份验证”。

身份验证失败 [SMTP:STARTTLS 失败(代码:220,响应:2.0.0 准备启动 TLS)]

包含对象但得到数组的预期响应