2012-04-12 136 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