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 超时