fsockopen 超时,无法连接到 Office 365 SMTP

Posted

技术标签:

【中文标题】fsockopen 超时,无法连接到 Office 365 SMTP【英文标题】:fsockopen timesout, cannot connect to Office 365 SMTP 【发布时间】:2018-07-08 17:54:31 【问题描述】:

我最近问了另一个问题here,但没有引起任何关注。总而言之,在我正在处理的 Drupal 8 站点上,SMTP 身份验证模块测试电子邮件发送失败并抛出错误“从 xxxx@xxxx.com 向 xxxx@xxxx.com 发送电子邮件时出错:SMTP 错误:可以不连接到 SMTP 主机。我已经把这个问题缩小了很多,在我看来,它的不同足以保证一个单独的线程。希望它足够简洁,能给我一些答案。

问题: The module 正在尝试以下 fsockopen 连接:

$this->smtp_conn = @fsockopen($host,
                              $port,
                              $errno,
                              $errstr,
                              $tval);

在文件 SMTP.php 的第 130-134 行。每个变量的值如下:

    $host = 'smtp.office365.com' $port = '587'(也试过 25) $tval = 10

错误值返回如下:

    $errorno = 20 $errstr = '连接超时'

对于 SMTP 连接来说,这似乎是一个非常基本的步骤,但我不确定它为什么会失败。显然这是一个非常模糊的错误,但是我还需要在服务器上设置什么才能使其正常工作吗?也许添加一个DNS记录?谁能想到任何超时的原因?

【问题讨论】:

为我工作。你从哪里连接?可能是您的网络有出站连接限制,或者您连接的主机被严重列入黑名单。 @Sammitch 我在办公室的 Mac 上。有什么方法可以检查其中任何一个吗?我对这玩意有点陌生,请问可以用telnet来测试一下吗? telnet smtp.office365.com 587,成功为220 CO2PR06CA0054.outlook.office365.com Microsoft ESMTP MAIL Service ready at Mon, 29 Jan 2018 23:00:40 +0000,失败为连接超时。不过,您最好询问您的 IT 人员是否阻止或过滤 SMTP。 【参考方案1】:

这个答案的两个部分:

感谢 cmets 中 @Sammitch 的帮助,我能够确定问题是我正在使用的网络服务器的问题,而不是 Outlook 服务器的问题。我与托管此站点的共享服务器的支持人员进行了交谈,他们说'默认情况下,出于安全原因,不允许与外部服务器的传出 SMTP 连接。我们现在允许您帐户的传出 SMTP 连接。一旦他们允许这样做,这个直接的问题就得到了解决。

然后又出现了一个问题。发送测试电子邮件时,我收到以下错误:“客户端无权作为此发件人发送”。这是由于未将“来自地址的电子邮件”设置为用户名电子邮件造成的。设置为该值后,电子邮件已成功发送。我知道这与这个特定问题并不完全相关,但它可能会帮助将来遇到这个问题的人。

【讨论】:

以上是关于fsockopen 超时,无法连接到 Office 365 SMTP的主要内容,如果未能解决你的问题,请参考以下文章

在 Codeigniter 中无法发送电子邮件 - fsockopen():无法连接到 ssl://smtp.gmail.com:465(连接被拒绝)

Laravel 队列,连接到 tcp://smtp.office365.com:587 超时

无法在 PHP 中与 fsockopen 连接(连接超时)

无法连接到我的 AWS 数据库实例 | psql:无法连接到服务器:操作超时

无法通过 DBEAVER 连接到雪花超时

ping 路由器 出现 间断的 请求超时或者是无法连接到 目标主机。