2012-04-12 4 views
13

Sto tentando di utilizzare PHPMailer per inviare e-mail con SMTP e Gmail. Lo script esatto sto usando funziona su altri server ma non sta funzionando sul server di questa particolare società di hosting.Come posso verificare se le porte 465 e 587 sono aperte con PHP?

Ho controllato il phpinfo() e mi dice che è allow_url_fopenon e non ci sono disabled_functions come fopen elencati.

Lo script non riesce e mi dice uno:

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

oppure

SMTP Error: Could not authenticate. 

Sto assumendo questo è perché non riesce a connettersi, perché ancora una volta questo lavoro su altri server e la le credenziali di autenticazione sono corrette

Così chiedo più in generale, c'è un modo per utilizzare PHP o jailshell ssh per verificare se le porte sono effettivamente aperte o no?

risposta

19

È possibile verificare la presenza di porte aperte/disponibili con 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); 
} 

... dove 5 è il timeout in secondi fino a quando la chiamata non riesce.

Ciò è probabilmente dovuto a un problema di firewall in cui il provider di hosting sta bloccando il collegamento a socket in uscita e/o porte specifiche. Tieni presente che è una configurazione di sicurezza molto comune bloccare le porte SMTP in uscita. Nel passato, solo la porta 25 era bloccata, ma sto iniziando a vedere sempre più varianti SSL bloccate.

La maggior parte dei provider e società di hosting consentiranno solo di connettersi al proprio server SMTP per impedire agli spammer di inoltrare posta indesiderata.

+0

+1 Per la registrazione, questo è lo stesso metodo utilizzato da PHPMailer per connettersi al server SMTP (tranne che con timeout e tentativi più lunghi). – webbiedave

+0

Grazie. Ho anche imparato che anche se la porta è aperta a volte l'inoltro è disabilitato. Qualche modo di verificarlo con PHP? – cwd

+0

@cwd: è necessario inviare i comandi SMTP appropriati e controllare le risposte utilizzando 'fwrite' e' fread' sull'handle restituito da 'fsockopen'. – netcoder