Solución de problemas PHP mail()

Política de dominio del remitente

Si has creado un formulario de correo PHP y encuentras que no está enviando correo electrónico, lo más frecuente es que se deba a la dirección FROM/DE que el formulario está usando en sus encabezados.

Una forma simple de confirmar si este es el caso:

  1. Inicia sesión en tu servidor web a través de FTPSSH.
  2. Navega al directorio /Maildir/new que se encuentra en el directorio de tu usuario:
    /home/usuario/Maildir/new
    En este directorio, verás los correos electrónicos que no se pudieron enviar.
  3. Abre los correos electrónicos en un editor de texto.
    Puedes ver el siguiente error:
    Sender domain not allowed. Please read: http://dhurl.org/20b (in reply to end of DATA command))

¿Por qué pasa esto?

Esto sucede por las siguientes razones:

  • Las políticas salientes de prevención de spam que se pusieron en vigencia, como se detalla aquí.
  • La dirección FROM/DE que estás utilizando no es una dirección de correo electrónico en el dominio desde el que está enviando y/o no está alojada en DreamHost.
  • Por ejemplo, si estás enviando desde un sitio llamado ‘example.com’, la dirección FROM/DE en tu formulario de correo PHP debe ser algo como admin@example.com. Cambiar esto a tu correo electrónico alojado con DreamHost permite que el formulario se envíe correctamente.

Si DreamHost no aloja tu correo electrónico, debes usar la autenticación SMTP para enviar tu formulario de correo PHP. Si habilitas la autenticación SMTP, puedes usar cualquier dirección de correo electrónico que desees como la dirección FROM/DE.

Errores de certificado usando PHP 5.6

En el pasado, era posible usar mail.example.com para conectarse (donde example.com es tu nombre de dominio real). Debido a cómo los clientes de correo modernos manejan la seguridad, esto NO se recomienda ya que puede generar errores de conexión. Por favor asegúrate de que solo estás usando el nombre de tu servidor de correo al conectarte. Esto debería ser imap.dreamhost.com o pop.dreamhost.com.

PHP 5.6 maneja los certificados de manera diferente a las versiones anteriores como se explica en la página siguiente:

Mensajes de error

Al enviar por correo PHP, puedes ver los siguientes errores:

  • PHPMailer
Warning: stream_socket_enable_crypto(): Peer certificate CN=`*.mail.dreamhost.com' did not match expected CN=`mail.example.com'
  • PHP SMTP mail
Failed to connect to ssl://mail.example.com:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://mail.example.com:465 (Unknown error) (code: -1, response: )]
  • Plugin SMTP de WordPress
The SMTP debugging output is shown below:

2015-09-08 19:44:51	Connection: opening to ssl://mail.example.com:465, timeout=300, options=array (
                   	                  )
2015-09-08 19:44:53	SMTP ERROR: Failed to connect to server:  (0)
2015-09-08 19:44:53	SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Solución

Esto se debe al nombre de host que se está utilizando. El certificado hace referencia a mail.dreamhost.com que no es el mismo que tu dominio. Consulta el siguiente artículo para obtener una explicación de este error:

La solución es usar el nombre de tu servidor de correo como hostname. En el código de tu formulario de correo PHP, estás utilizando tu dominio como el nombre de servidor de correo. Puede parecer algo como esto:

$mail_host = "mail.example.com";

En lugar de usar tu nombre de dominio en la variable del servidor de correo, usa tu nombre real de servidor de correo. Consulta el siguiente artículo para obtener instrucciones sobre cómo localizar el nombre de tu servidor de correo.

Actualiza tu código de formulario de correo utilizando un cliente FTP o SSH:

En tu formulario de correo, cambia tu nombre de host a lo siguiente:

$mail_host = "imap.dreamhost.com"; 

Cambiar el nombre de host corrige este error. Tu hostname de correo puede diferir del anterior. Consulta el siguiente artículo para obtener más detalles sobre cómo ubicar tu nombre de servidor de correo específico.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?