如何检查端口465和587是否使用PHP打开?

如何检查端口465和587是否使用PHP打开?,php,linux,smtp,ports,Php,Linux,Smtp,Ports,我正在尝试使用PHPMailer发送带有SMTP和gmail的电子邮件。我使用的确切脚本可以在其他服务器上运行,但不能在这个特定托管公司的服务器上运行 我已经检查了phpinfo(),它告诉我allow\u url\u fopen是打开的,并且没有禁用的功能如fopen列出 脚本失败,它告诉我: SMTP -> ERROR: Failed to connect to server: Connection timed out (110) 否则 SMTP Error: Could not

我正在尝试使用PHPMailer发送带有SMTP和gmail的电子邮件。我使用的确切脚本可以在其他服务器上运行,但不能在这个特定托管公司的服务器上运行

我已经检查了
phpinfo()
,它告诉我
allow\u url\u fopen
打开的
,并且没有
禁用的功能
fopen
列出

脚本失败,它告诉我:

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

SMTP Error: Could not authenticate.
我假设这是因为它无法连接,因为这同样适用于其他服务器,并且身份验证凭据是正确的


因此,我更一般地问,是否有一种方法可以使用PHP或jailshell
ssh
检查端口是否实际打开?

您可以使用
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);
}
…其中
5
是呼叫失败前的超时时间(以秒为单位)

这可能是由于您的主机提供商阻止您连接到出站套接字和/或特定端口的防火墙问题造成的。请记住,阻止出站SMTP端口是一种非常常见的安全配置。回到过去,只有端口
25
被阻止,但我开始看到越来越多的SSL变体也被阻止


大多数提供商和托管公司只允许您连接到他们自己的SMTP服务器,以防止垃圾邮件发送者转发垃圾邮件。

+1请注意,这与PHPMailer连接到SMTP服务器的方法相同(超时和重试时间较长除外)。谢谢。我还了解到,即使端口打开,有时中继也会被禁用。有什么方法可以用PHP检查吗?@cwd:您需要发送适当的SMTP命令,并在
fsockopen
@netcoder返回的句柄上使用
fwrite
fread
检查响应-有什么提示吗?问题是我使用的是PHPMailer库,但我认为远程服务器上的防火墙没有设置为允许中继,所以我相信PHPMailer实际上是在尝试与本地SMTP客户端握手,尽管它没有意识到这一点,因此,从服务器返回的
密码不被接受:535错误的身份验证数据
错误(针对错误的服务器)。如果有办法检查,或者PHPMailer检查了,那就太好了。附言:你在防火墙方面做得很好。谢谢你的回答,非常感谢!我已经在我的论坛中将smtp.googlemail.com设置为smtp服务器。它运行了很长一段时间,直到最近才停止。经过漫长而令人沮丧的调查,我找到了你的答案,它完美地解释了发生的事情:我的提供商将传出的SMTP连接重定向到本地主机,而身份验证失败。