Envío de correo

# mail

(PHP 4, PHP 5, PHP 7, PHP 8)

mail — Envío de correo

### Descripción

function mail(
string `$to`,
string `$subject`,
string `$message`,
array|string `$additional_headers` = [],
string `$additional_params` = ""
): bool

Envía un correo.

### Parámetros

`to`

  El o los destinatarios del correo.

  El formato de esta cadena debe corresponder con la » RFC 2822. A continuación se muestran algunos ejemplos:

  - destinatario@example.com
  - destinatario@example.com, otro_destinatario@example.com
  - Destinatario
  - Destinatario , Otro destinatario
`subject`

  Asunto del correo a enviar.

  Precaución

  El asunto debe cumplir con la » RFC 2047.

`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.

  Precaución

  (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.

  > Nota:

  > 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).

  > Nota:

  > Si el mensaje no es recibido, intente utilizar únicamente un carácter `LF` (`\n`). Algunos agentes de transferencia de correo Unix (por ejemplo » qmail) 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.

`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

Ejemplo #1 Envío de un correo

Uso de la función mail() para enviar un correo simple:

    <?php
    // El mensaje
    $message = "Línea 1\r\nLínea 2\r\nLínea 3";

    // En caso de que nuestras líneas contengan más de 70 caracteres, las cortamos utilizando wordwrap()
    $message = wordwrap($message, 70, "\r\n");

    // Envío del correo
    mail('caffeinated@example.com', 'Mi Asunto', $message);
    ?>

Ejemplo #2 Envío de un correo con encabezados adicionales

Añadir encabezados simples, especificando al MUA las direcciones `"From"` y `"Reply-To"`:

    <?php
         $to      = 'persona@example.com';
         $subject = 'el asunto';
         $message = '¡Hola!';
         $headers = 'From: webmaster@example.com' . "\r\n" .
         'Reply-To: webmaster@example.com' . "\r\n" .
         'X-Mailer: PHP/' . phpversion();

         mail($to, $subject, $message, $headers);
     ?>

Ejemplo #3 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).

    <?php
    $to      = 'nadie@example.com';
    $subject = 'el asunto';
    $message = 'hola';
    $headers = array(
        'From' => 'webmaster@example.com',
        'Reply-To' => 'webmaster@example.com',
        'X-Mailer' => 'PHP/' . phpversion()
    );

    mail($to, $subject, $message, $headers);
    ?>

Ejemplo #4 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`.

    <?php
         mail('persona@example.com', 'el asunto', 'el mensaje', null,
         '-fwebmaster@example.com');
    ?>

Ejemplo #5 Envío de correo HTML

También es posible enviar correos HTML con la función mail().

    <?php
         // Varios destinatarios
         $to  = 'johny@example.com, sally@example.com'; // note la coma

         // Asunto
         $subject = 'Calendario de cumpleaños para Agosto';

         // mensaje
         $message = '
         <html>
          <head>
           <title>Calendario de cumpleaños para Agosto</title>
          </head>
          <body>
           <p>¡Aquí están los cumpleaños que se avecinan en el mes de Agosto!</p>
           <table>
            <tr>
             <th>Persona</th><th>Día</th><th>Mes</th><th>Año</th>
            </tr>
            <tr>
             <td>Josiane</td><td>3</td><td>Agosto</td><td>1970</td>
            </tr>
            <tr>
             <td>Emma</td><td>26</td><td>Agosto</td><td>1973</td>
            </tr>
           </table>
          </body>
         </html>
         ';

         // Para enviar un correo HTML, el encabezado Content-type debe ser definido
         $headers[] = 'MIME-Version: 1.0';
         $headers[] = 'Content-type: text/html; charset=iso-8859-1';

         // Encabezados adicionales
         $headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
         $headers[] = 'From: Cumpleaños <cumpleanos@example.com>';
         $headers[] = 'Cc: cumpleanos_archivo@example.com';
         $headers[] = 'Bcc: cumpleanos_verif@example.com';

         // Envío
         mail($to, $subject, $message, implode("\r\n", $headers));
    ?>

> Nota:

> Si se planea enviar correos HTML u otros más complejos, se recomienda utilizar el paquete PEAR » PEAR::Mail_Mime.

### Notas

> Nota:

> La implementación SMTP (solo en Windows) de la función mail() difiere significativamente de la implementación de sendmail. En primer lugar, no utiliza un programa local para componer los mensajes, sino que opera únicamente y directamente sobre los sockets, lo que significa que un `MTA` está necesariamente escuchando en un socket de red (que puede estar en la red local o en una máquina remota).

> En segundo lugar, los encabezados personalizados como `From:`, `Cc:`, `Bcc:` y `Date:` no son interpretados por el `MTA` en primer lugar, sino que son analizados por PHP.

> Además, el parámetro `to` no debe ser una dirección en el formato `"Algo <alguien@example.com>"`. El comando mail no analizará correctamente esto al comunicarse con el MTA.

> Nota:

> Es importante tener en cuenta que la función mail() no está recomendada para manejar grandes volúmenes de correos en un bucle. Esta función abre y cierra un socket SMTP para cada correo, lo que no es muy eficiente.

> Para enviar grandes volúmenes de correos, consulte los paquetes » PEAR::Mail y » PEAR::Mail_Queue.

> Nota:

> Las siguientes RFC pueden ser útiles: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049 y » RFC 2822.

### Ver también

- mb_send_mail() - Envía un correo electrónico codificado
- imap_mail() - Envía un mensaje de correo electrónico
- » PEAR::Mail
- » PEAR::Mail_Mime

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open