Descripción general de PHP mail
La función mail() está integrada en PHP y se usa para enviar emails directamente desde un web server. Es una forma sencilla de enviar notificaciones, mensajes de formularios de contacto, confirmaciones de pedidos y otros tipos de mensajes.
Adecuada para la funcionalidad básica de email sin usar bibliotecas externas.
Cómo funciona mail()
Cuando llamas a la función mail(), PHP pasa el email al agente de transferencia de correo del sistema (MTA) instalado en el servidor (normalmente Sendmail o Postfix). Luego, el MTA procesa y entrega el mensaje a la dirección especificada.
Sintaxis
mail(to, subject, message, headers, parameters);
Parámetros
| Parámetro | Descripción |
|---|---|
| $to | Dirección de email del destinatario. Puedes especificar varias direcciones separadas por comas. |
| $subject | Asunto del email. No debe contener saltos de línea. |
| $message | Cuerpo principal del mensaje. |
| $headers | Encabezados adicionales como From, Reply-To, Cc, Bcc, etc. |
| $parameters | Parámetros extra, como especificar el remitente para Sendmail (-f). |
Ejemplo simple
<?php $to = "user@example.com"; $subject = "Test Email"; $message = "Hello! This is a test email sent using PHP."; $headers = "From: webmaster@yourdomain.com"; mail($to, $subject, $message, $headers); ?>
Notas importantes
1. Se requiere el encabezado From:
Si no especificas un encabezado From:, la mayoría de los servidores de correo rechazarán el mensaje como sospechoso o spam.
$headers = "From: noreply@yourdomain.com";
2. Formato de mensajes de varias líneas
Usa rn para separar las líneas en tu mensaje:
$message = "Hello,rnrnThank you for your order.rnrnBest regards,rnYour Team";
3. Múltiples encabezados
Usa rn para separar múltiples encabezados como Reply-To, Cc y Bcc:
$headers = "From: admin@yourdomain.comrn"; $headers .= "Reply-To: support@yourdomain.comrn"; $headers .= "Cc: someone@yourdomain.comrn";
Ejemplo: Enviar email HTML (solo texto)
La función mail() no admite archivos adjuntos de forma nativa. Pero puedes enviar emails HTML o establecer el tipo de contenido manualmente:
$headers = "MIME-Version: 1.0rn"; $headers .= "Content-type: text/html; charset=UTF-8rn"; $headers .= "From: info@yourdomain.com"; $message = "<h1>Hello!</h1><p>Your order has been received.</p>"; mail("user@example.com", "Order Confirmation", $message, $headers);
Problemas comunes y soluciones
| Problema | Causa / Solución |
|---|---|
| Email no entregado | Falta el encabezado From: o la IP del servidor está en una lista negra |
| El email no se envía en absoluto | No hay un MTA instalado (por ejemplo, se requiere Sendmail/Postfix) |
| Error: mail() ha sido deshabilitada | mail() está deshabilitada en php.ini (a menudo por política del host) |
| El texto ruso aparece como ???? | El charset no está configurado en UTF-8 en los encabezados |
| Los emails van a spam | From incorrecto, sin SPF/DKIM o dominio mal configurado |
Conclusión
La función mail() es una herramienta básica pero potente para enviar emails directamente desde scripts PHP. Es:
- Fácil de usar
- No requiere bibliotecas adicionales
- Adecuada para notificaciones internas, formularios de contacto y autoresponders
Sin embargo, ten en cuenta sus limitaciones:
- Depende de la configuración de correo del servidor
- No admite archivos adjuntos
- Puede estar deshabilitada por defecto en algunos entornos de shared hosting
Si planeas enviar emails con regularidad, asegúrate de que tu servidor esté correctamente configurado para correo saliente (con Sendmail/Postfix instalados, registros SPF/DKIM configurados y mail() habilitada en php.ini).


