简体   繁体   中英

How can I check if ports 465 and 587 are open with PHP?

I'm trying to use PHPMailer to send e-mails with SMTP and gmail. The exact script am using works on other servers but it is not working on this particular hosting company's server.

I have checked the phpinfo() and it tells me that allow_url_fopen is on and there are no disabled_functions like fopen listed.

The script fails and it tells me either:

SMTP -> ERROR: Failed to connect to server: Connection timed out (110) 

or else

SMTP Error: Could not authenticate.

I'm assuming this is because it can not connect, because again this work on other servers and the authentication credentials are correct.

So I ask more generally, is there a way I can use PHP or jailshell ssh to check and see if the ports are actually open or not?

You can check for open/available ports with fsockopen :

$fp = fsockopen('127.0.0.1', 25, $errno, $errstr, 5);
if (!$fp) {
    // port is closed or blocked
} else {
    // port is open and available
    fclose($fp);
}

...where 5 is the timeout in seconds until the call fails.

This is probably due to a firewall issue where your hosting provider is blocking you from connecting to outbound sockets and/or specific ports. Keep in mind that it is a very usual security configuration to block outbound SMTP ports. Back in the day, only port 25 was blocked, but I'm starting to see more and more SSL variants being blocked as well.

Most providers and hosting companies will only allow you to connect to their own SMTP server to prevent spammers from relaying junk mail.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM