Política de dominio del remitente
Si has creado un formulario de correo PHP y encuentras que no está enviando correo, lo más frecuente es que se deba a la dirección DE (FROM) que el formulario está usando en tus encabezados.
Una forma simple de confirmar si este es el caso:
- Inicia sesión en tu servidor web a través de FTP o SSH.
- Navega al directorio /Maildir/new que se encuentra en el directorio de tu usuario:
/home/usuario/Maildir/new
- Abre los correos en un editor de texto. Puedes ver el siguiente error:
Sender domain not allowed. Please read: https://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 DE (FROM) que estás utilizando no es una dirección de correo 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 DE (FROM) en tu formulario de correo PHP debe ser algo como admin@example.com. Cambiar esto a tu correo alojado con DreamHost permite que el formulario se envíe correctamente.
Si DreamHost no está alojando tu correo, 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 que desees como la dirección DE (FROM).
Los mensajes de correo no se envían en servidores compartidos
Si has verificado que has configurado tu dominio correctamente para seguir la Política de dominio del remitente, pero los mensajes de correo aún no se envían desde un servidor compartido, es posible que el servidor haya alcanzado su límite de envío por hora. Para evitar esto, asegúrate de que tu sitio esté configurado para usar SMTP para enviar:
- WordPress: WP Mail SMTP
- PHP: PHPMailer
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ás usando. El certificado hace referencia a mail.dreamhost.com que no es el mismo que tu dominio. Mira 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.