Home » Php » sockets – fsockopen(): unable to connect not work with PHP (Connection timed out)

sockets – fsockopen(): unable to connect not work with PHP (Connection timed out)

Posted by: admin July 12, 2020 Leave a comment

Questions:

I have this code:

$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');
}

It is not connected to smtp server but when I use command

smtp:217.196.209.9

on mxtoolbox.com it is connected.

Am I doing something wrong with PHP code?
I already tried replace $host to smtp.massag.com but not helped.

How to&Answers:

Using dig to query the IP provided or its reverse DNS it shows that there are no MX records so errors are expected.

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

But returns results on 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.

Finally, adding some tests to avoid unnecessary errors and using working domains

<?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");
    }
}
?>

Result using tutorialspoint.com as domain:

    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

Using the domain provided by OP (massag.com)

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

Answer:

I replaced fsockopen function with socket_create and socket_connect and its much much better. Function fsockopen sometimes not conneted correctly.