Solucionar problemas de PHP mail()

 

Generalidades

A continuación se explica cómo solucionar y resolver dos errores comunes de PHP mail():

  • Errores de la política de dominio del remitente
  • Errores de certificado

Cómo corregir errores de 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 del REMITENTE que el formulario está usando en tus encabezados.

Encontrar los errores

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/username/Maildir/new
    En este directorio, verás los correos que no se pudieron enviar.
  3. Edita los correos a través de FTP o SSH.
    Puedes que veas el siguiente error:
    Sender domain not allowed. Please read: https://dhurl.org/20b (in reply to end of DATA command))

Corregir el error

Esto sucede por las siguientes razones:

  • Las políticas de prevención de spam saliente que se pusieron en práctica, como se detalla aquí.
  • La dirección del REMITENTE que estás usando no es una dirección de correo del dominio desde el cual estás enviando y/o no está alojada en DreamHost. Por ejemplo, si estás enviando desde un sitio llamado example.com, la dirección REMITENTE en tu formulario PHP Mail debe ser algo como admin@example.com. Cambiar esto a tu correo alojado en DreamHost permitirá 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. Revisa los siguientes artículos para más información:

Cómo corregir los errores de certificado

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.

Los errores de certificado son otro problema común que puede ocurrir al enviar PHP mail(). A continuación, se muestra cómo encontrar el error y algunos pasos para ayudarte a resolverlo.

Encontrar el error

Al enviar PHP mail(), es posible que veas los siguientes mensajes de error:

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 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://mail.example.com (Unknown error) (code: -1, response: )]

WordPress SMTP plugins

The SMTP debugging output is shown below:

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

Corregir el error

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. Revisa este artículo para obtener una explicación de este error.

La solución es utilizar el nombre del servidor de correo como el nombre de host. Por ejemplo, en el código PHP de tu formulario de correo, estás utilizando tu dominio como el nombre de host:

$mail_host = "mail.example.com";

En su lugar, utiliza el nombre del servidor de correo de DreamHost. Actualiza el código de tu formulario de correo utilizando un cliente FTP o SSH a lo siguiente:

$mail_host = "imap.dreamhost.com"; 

Cambiar el nombre de host corrige el error.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?