【问题标题】:fsockopen(): unable to connect not work with PHP (Connection timed out)fsockopen():无法连接 PHP(连接超​​时)
【发布时间】:2018-12-30 03:07:23
【问题描述】:

我有这个代码:

$domain = 'massag.com';

$hosts = array();
$mxweights = array();
getmxrr($domain, $hosts, $mxweights);

var_dump($hosts);
var_dump($mxweights);

$host = gethostbynamel($hosts[0])[0];
var_dump($host);

$f = @fsockopen($host, 25, $errno, $errstr, 10);

if(!$f) {
    var_dump('NOT CONNECTED');
}

它没有连接到smtp服务器但是当我使用命令时

smtp:217.196.209.9

mxtoolbox.com 上已连接。

我的 PHP 代码有问题吗? 我已经尝试将$host 替换为 smtp.massag.com 但没有帮助。

【问题讨论】:

  • 我试过了:telnet smtp.miramo.cz 25 和它的连接很好。
  • 是否需要更多配置,例如用户代理字符串或需要 smtp 服务器的其他消息或标头?

标签: php sockets smtp


【解决方案1】:

使用dig 查询提供的 IP 或其反向 DNS 显示没有 MX 记录,因此预计会出现错误。

dig -x 217.196.209.9 MX | grep 'IN.*MX'
;9.209.196.217.in-addr.arpa.    IN      MX

dig smtp.miramo.cz MX | grep 'IN.*MX'
;smtp.miramo.cz.                        IN      MX

但在 massag.com 上返回结果

dig massag.com MX | grep 'IN.*MX'
;massag.com.                    IN      MX
massag.com.             85375   IN      MX      20 miramo3.miramo.cz.
massag.com.             85375   IN      MX      10 smtp.miramo.cz.

最后,添加一些测试以避免不必要的错误并使用工作域

<?php
$domain = 'massag.com';

if(getmxrr($domain, $hosts, $mxweights)){
    print_r($hosts);
    print_r($mxweights);
    if(count($hosts) > 0){
        $host = gethostbynamel($hosts[0])[0];
        print("Found host: " . $host . "\n");

        $f = fsockopen($host, 25, $errno, $errstr, 10);

        if(!$f){
            var_dump('NOT CONNECTED');
        }
    }else{
        print("no MX record found\n");
    }
}
?>

使用 tutorialspoint.com 作为域的结果:

    Array
(
    [0] => ALT2.ASPMX.L.GOOGLE.com
    [1] => ASPMX.L.GOOGLE.com
    [2] => ALT1.ASPMX.L.GOOGLE.com
    [3] => ALT4.ASPMX.L.GOOGLE.com
    [4] => ALT3.ASPMX.L.GOOGLE.com
)
Array
(
    [0] => 5
    [1] => 1
    [2] => 5
    [3] => 10
    [4] => 10
)
Found host: 74.125.128.26

使用OP提供的域名(massag.com)

    Array
(
    [0] => smtp.miramo.cz
    [1] => miramo3.miramo.cz
)
Array
(
    [0] => 10
    [1] => 20
)
Found host: 217.196.209.9

【讨论】:

    【解决方案2】:

    我用socket_createsocket_connect 替换了fsockopen 函数,它好多了。函数 fsockopen 有时连接不正确。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2012-02-03
      • 2017-03-08
      • 2018-07-08
      • 2013-06-10
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2015-07-29
      相关资源
      最近更新 更多