2012-04-12 4 views
13

私はSMTPとgmailで電子メールを送信するためにPHPMailerを使用しようとしています。正確なスクリプトは他のサーバー上で動作していますが、この特定のホスティング会社のサーバーでは動作していません。ポート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

+0

ありがとうございます。私はまた、ポートが開いているにもかかわらず、中継が無効になることがあることを学びました。 PHPでそれをチェックする方法はありますか? – cwd

+0

@cwd:適切なSMTPコマンドを送信し、 'fsockopen 'によって返されたハンドルに' fwrite'と 'fread'を使って応答をチェックする必要があります。 – netcoder

関連する問題