En esta página
Envío de correo
Descripción#
mail(string $to, string $subject, string $message, [array $additional_headers], [string $additional_params]): bool
```php
Envía un correo.
## Parámetros
`to`
El o los destinatarios del correo.
El formato de esta cadena debe corresponder con la [RFC 2822](https://datatracker.ietf.org/doc/html/rfc2822). A continuación se muestran algunos ejemplos: destinatario@example.com, destinatario@example.com, otro_destinatario@example.com, Destinatario \<destinatario@example.com\>, Destinatario \<destinatario@example.com\>, Otro destinatario \<otro_destinatario@example.com\>
`subject`
Asunto del correo a enviar.
> [!CAUTION]
> El asunto debe cumplir con la [RFC 2047](https://datatracker.ietf.org/doc/html/rfc2047).
`message`
Mensaje a enviar.
Cada línea debe estar separada por un carácter `CRLF` (`\r\n`). Las líneas no deben contener más de 70 caracteres.
> [!CAUTION]
> (Solo Windows) Cuando PHP se comunica directamente con un servidor SMTP, si se encuentra un punto al inicio de una línea, será eliminado. Para evitar este comportamiento, reemplace estas ocurrencias con dos puntos.
>
> ```
> <?php
> $text = str_replace("\n.", "\n..", $text);
> ?>
>
>
> ```
`additional_headers` (opcional)
`String` o `array` a insertar al final de los encabezados del correo.
Este parámetro se utiliza típicamente para añadir encabezados adicionales (From, Cc y Bcc). Los encabezados adicionales deben estar separados por un carácter `CRLF` (`\r\n`). Si se utilizan datos externos para componer este encabezado, deben ser limpiados primero para evitar la inyección de datos no deseados en los encabezados.
Si se pasa un `array`, sus claves son los nombres de los encabezados y sus valores son los valores de los encabezados respectivos.
> [!NOTE]
> Al enviar un correo, el correo *debe* contener un encabezado `From`. Puede ser definido por el parámetro `additional_headers`, o puede ser un valor predeterminado definido en el `php.ini`.
>
> No hacerlo causará un mensaje de error similar a `Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing`. El encabezado `From` también define el encabezado `Return-Path` al enviar directamente vía SMTP (solo Windows).
> [!NOTE]
> Si el mensaje no es recibido, intente utilizar únicamente un carácter `LF` (`\n`). Algunos agentes de transferencia de correo Unix (por ejemplo [qmail](http://cr.yp.to/qmail.html)) reemplazan automáticamente el carácter `LF` por el carácter `CRLF` (lo que equivale a duplicar el carácter `CR` si se utiliza el carácter `CRLF`). Esto debe ser un último recurso ya que no cumple con la [RFC 2822](https://datatracker.ietf.org/doc/html/rfc2822).
`additional_params` (opcional)
El parámetro `additional_params` puede ser utilizado para pasar banderas adicionales como opciones a la línea de comandos configurada para ser utilizada para enviar los correos utilizando el parámetro de configuración `sendmail_path`. Por ejemplo, esto puede ser utilizado para definir la dirección del remitente del sobre al utilizar sendmail con la opción `-f`.
Este parámetro es escapado por la función `escapeshellcmd` internamente para prevenir la ejecución de un comando. La función `escapeshellcmd` previene la ejecución de un comando, pero permite añadir parámetros adicionales. Por razones de seguridad, se recomienda al usuario limpiar este parámetro para evitar añadir parámetros no deseados al comando shell.
Dado que la función `escapeshellcmd` se aplica automáticamente, algunos caracteres permitidos en las direcciones de correo por las RFCs de internet ya no pueden ser utilizados. La función `mail` no puede permitir estos caracteres, por lo tanto, en los programas donde su utilización es necesaria, debería utilizarse un método alternativo para el envío de correos (como el uso de un framework o una biblioteca.
El usuario bajo el cual se ejecuta el servidor web debe ser añadido como usuario de confianza en la configuración de sendmail para que el encabezado `X-Warning` no sea añadido al mensaje cuando el remitente del sobre (-f) es definido utilizando este método. Para los usuarios de sendmail, este archivo es `/etc/mail/trusted-users`.
## Valores devueltos
Devuelve `true` si el correo ha sido aceptado para su entrega, `false` en caso contrario.
Es importante tener en cuenta que el hecho de que el correo haya sido aceptado para su entrega no garantiza que llegue a su destino.
## Historial de cambios
| Versión | Descripción |
|---------|---------------------------------------------------------|
| 7.2.0 | El parámetro `additional_headers` ahora acepta `array`. |
## Ejemplos
Envío de un correo
Uso de la función `mail` para enviar un correo simple:
Envío de un correo con encabezados adicionales
Añadir encabezados simples, especificando al MUA las direcciones `"From"` y `"Reply-To"`:
Envío de un correo con un `array` de encabezados adicionales
Este ejemplo envía el mismo correo que el ejemplo anterior, pero pasa los encabezados adicionales como un array (disponible desde PHP 7.2.0).
Envío de un correo con un parámetro adicional de línea de comandos
El parámetro `additional_params` puede ser utilizado para pasar un parámetro adicional al programa configurado para ser utilizado para enviar los correos utilizando `sendmail_path`.
Envío de correo HTML
También es posible enviar correos HTML con la función `mail`.
¡Aquí están los cumpleaños que se avecinan en el mes de Agosto!
| Persona | Día | Mes | Año |
|---|---|---|---|
| Josiane | 3 | Agosto | 1970 |
| Emma | 26 | Agosto | 1973 |