2012-04-12 65 views
13

我试图用PHPMailer发送电子邮件与SMTP和Gmail。我使用的确切脚本适用于其他服务器,但它不适用于此特定托管公司的服务器。如何检查端口465和587是否用PHP打开?

我检查了phpinfo()和它告诉我,allow_url_fopenon并没有像disabled_functions上市fopen

的脚本失败,它告诉我或者:

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

否则

SMTP Error: Could not authenticate. 

我假设这是因为它无法连接,因为再在其他服务器和这项工作认证凭证是正确的。

所以我更一般地问,有没有办法可以使用PHP或jailshell ssh来检查并查看端口是否实际打开?

回答

19

您可以检查开/可用端口与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服务器,以防止垃圾邮件发送者转发垃圾邮件。

+0

+1为了记录,这是PHPMailer用于连接到SMTP服务器的相同方法(除了更长的超时时间和重试次数外)。 – webbiedave 2012-04-12 16:59:35

+0

谢谢。我还了解到,即使端口处于打开状态,但有时中继功能仍处于禁用状态。任何方式来检查与PHP? – cwd 2012-04-16 18:56:58

+0

@cwd:您需要发送适当的SMTP命令,并使用'fsockopen'返回的句柄上的'fwrite'和'fread'来检查响应。 – netcoder 2012-04-16 19:14:42