PHP mail(): cómo enviar correo correctamente desde una aplicación web

La función PHP mail() permite entregar un mensaje al sistema de correo configurado en el servidor, pero que la función devuelva un resultado correcto no significa que el mensaje vaya a llegar necesariamente a la bandeja del destinatario.

Qué hace PHP mail()

La aplicación entrega el mensaje al mecanismo de transporte configurado en PHP y en el sistema operativo. A partir de allí, el servidor de correo debe procesarlo y realizar la entrega.

Por qué muchas aplicaciones utilizan SMTP autenticado

WordPress, tiendas virtuales, formularios y otras aplicaciones suelen ofrecer la posibilidad de enviar mediante SMTP autenticado. Esta opción permite utilizar explícitamente un servidor, usuario, contraseña y cifrado y facilita el diagnóstico de errores de autenticación o conexión.

Datos habituales de SMTP

  • Servidor SMTP indicado por el proveedor.
  • Dirección de correo completa como usuario, cuando corresponda.
  • Contraseña de la cuenta.
  • Puerto 465 con SSL/TLS o 587 con STARTTLS, según la configuración del servidor.
  • Autenticación SMTP habilitada.

SPF, DKIM y DMARC

El método utilizado por la aplicación no reemplaza la autenticación del dominio. Para mejorar la legitimidad de los mensajes deben estar correctamente configurados SPF, DKIM y DMARC.

PHP mail() y grandes volúmenes

La propia documentación de PHP advierte que mail() no es una solución eficiente para enviar grandes cantidades de mensajes en un bucle. Para campañas o volúmenes importantes conviene utilizar una biblioteca de correo y un servicio de entrega adecuado.

Si los mensajes no llegan

Revisá los registros de la aplicación y del servidor, la dirección remitente, autenticación DNS y posibles rebotes. Un resultado exitoso de mail() solo indica que el mensaje fue aceptado para su procesamiento local.