2012-04-12 78 views
13

Estoy tratando de usar PHPMailer para enviar correos electrónicos con SMTP y gmail. La secuencia de comandos exacta que estoy usando funciona en otros servidores, pero no funciona en el servidor de esta empresa de hosting en particular.¿Cómo puedo verificar si los puertos 465 y 587 están abiertos con PHP?

He comprobado el phpinfo() y me dice que es allow_url_fopenon y no hay disabled_functions como fopen enumerado.

El guión falla y me dice que ya sea:

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

o de lo contrario

SMTP Error: Could not authenticate. 

Estoy suponiendo que esto se debe a que no se puede conectar, porque una vez más este trabajo en otros servidores y la las credenciales de autenticación son correctas.

Así que pregunto más en general, ¿hay alguna manera de que pueda usar PHP o jailshell ssh para verificar y ver si los puertos están realmente abiertos o no?

Respuesta

19

Puede comprobar si hay puertos abiertos/disponibles 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); 
} 

... donde 5 es el tiempo de espera en segundos hasta que la llamada falla.

Esto se debe probablemente a un problema de firewall en el que su proveedor de alojamiento web le impide conectarse a los puertos de salida y/o puertos específicos. Tenga en cuenta que es una configuración de seguridad muy habitual bloquear los puertos SMTP salientes. De vuelta en el día, solo el puerto 25 estaba bloqueado, pero estoy empezando a ver más y más variantes SSL bloqueadas también.

La mayoría de los proveedores y empresas de alojamiento solo le permitirán conectarse a su propio servidor SMTP para evitar que los remitentes de correo no deseado puedan retransmitir correo no deseado.

+0

+1 Para el registro, este es el mismo método que utiliza PHPMailer para conectarse al servidor SMTP (excepto con un tiempo de espera más largo y reintentos). – webbiedave

+0

Gracias. También aprendí que a pesar de que el puerto está abierto a veces la retransmisión está deshabilitada. ¿Alguna forma de verificar eso con PHP? – cwd

+0

@cwd: debe enviar los comandos SMTP apropiados y verificar las respuestas usando 'fwrite' y' fread' en el manejador devuelto por 'fsockopen'. – netcoder

Cuestiones relacionadas