Correo
PHP Manual

mail

(PHP 4, PHP 5)

mail — Enviar correo

Descripción

bool mail ( string $para , string $asunto , string $mensaje [, string $cabeceras_adicionales [, string $parametros_adicionales ]] )

Envía un correo electrónico.

Lista de parámetros

para

Recipiente, o recipientes del correo.

El formato de esta cadena debe ser compatible con el documento » RFC 2822. Algunos ejemplos son:

  • usuario@example.com
  • usuario@example.com, otrousuario@example.com
  • Usuario <usuario@example.com>
  • Usuario <usuario@example.com>, Otro Usuario <otrousuario@example.com>

asunto

Asunto del correo electrónico a ser enviado.

Caution

Éste no debe contener caracteres de salto de línea, o es posible que el correo no sea enviado apropiadamente.

mensaje

Mensaje a ser enviado.

Cada línea debe ser sepadarada con un caracter LF (\n). Las líneas no deberían exceder los 70 caracteres.

Caution

(Sólo en Windows) Cuando PHP sostiene comunicación con el servidor SMTP directamente, si un punto es encontrado al comienzo de la línea, éste es removido. Para contrarestar este comportamiento, reemplace estas ocurrencias con dos puntos.

<?php
$texto 
str_replace("\n.""\n.."$texto);
?>

cabeceras_adicionales (opcional)

Cadena a ser insertada al final de la cabecera de correo electrónico.

Por lo general, este parámetro es usado para agregar cabeceras extra (From, Cc y Bcc). Múltiples cabeceras extra deben ser separadan con una secuencia CRLF (\r\n).

Note: Cuando envíe correo, el mensaje debe contener una cabecera From. Ésta puede definirse con el parámetro cabeceras_adicionales , o puede definirse un valor predeterminado en php.ini.
No hacer esto resultará en un mensaje de error similar a Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. La cabecera From define también Return-Path bajo Windows.

Note: Si los mensajes no son recibidos, intente usar un caracter LF (\n) solamente. Algunos agentes de transferencia de correo de pobre calidad en Unix reemplazan LF por CRLF automáticamente (lo cual conlleva a caracteres CR dobles si se usa CRLF). Esto debe ser usado como último recurso, ya que no es compatible con la especificación en » RFC 2822.

parametros_adicionales (opcional)

El parámetro parametros_adicionales puede ser usado para pasar un parámetro extra al programa configurado para ser usado cuando se envíe correo mediante la opción de configuración sendmail_path. Por ejemplo, este parámetro puede usarse para definir la dirección de sobre del origen cuando se usa sendmail con la opción -f.

El usuario bajo el que corre su servidor web debe ser agregado como un usuario confiable en la configuración de sendmail para prevenir que se agregue una cabecera 'X-Warning' a los mensajes cuando el origen de sobre (-f) sea definido usando este método. Para usuarios de sendmail, este archivo es /etc/mail/trusted-users.

Valores retornados

Devuelve TRUE si el correo fue aceptado satisfactoriamente para su envío, o FALSE de lo contrario.

Es importante notar que solo porque el correo sea aceptado para su envio NO quiere decir que el correo realmente vaya a llegar a su destino planeado.

Registro de cambios

Versión Descripción
4.3.0 (Sólo en Windows) Todas las cabeceras personalizadas (como From, Cc, Bcc y Date) son soportadas, y no son sensibles a mayúsculas y minúsculas). (Dado que las cabeceras personalizadas no son interpretadas por el MTA en primer lugar, sino interpretadas por PHP, PHP < 4.3 sólo soportaba el elemento de cabecera Cc y era sensible a mayúsculas y minúsculas).
4.2.3 El parámetro parametros_adicionales es deshabilitado en modo seguro y la función mail() producirá un mensaje de advertencia y devolverá FALSE cuando sea usado.
4.0.5 El parámetro parametros_adicionales fue agregado.

Ejemplos

Example#1 Envío de correo.

Uso de mail() para enviar un correo simple:

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

// En caso de que cualquier línea tenga más de 70 caracteres, habría
// que usar wordwrap()
$mensaje wordwrap($mensaje70);

// Enviar
mail('cafeinado@example.com''Mi Asunto'$mensaje);
?>

Example#2 Envío de correo con cabeceras extra.

La adición de cabeceras básicas, que le indican al MUA las direcciones From y Reply-To:

<?php
$para      
'nadie@example.com';
$asunto    'el asunto';
$mensaje   'hola';
$cabeceras 'From: webmaster@example.com' "\r\n" .
    
'Reply-To: webmaster@example.com' "\r\n" .
    
'X-Mailer: PHP/' phpversion();

mail($para$asunto$mensaje$cabeceras);
?>

Example#3 Envío de correo con un parámetro de línea de comandos adicional.

El parámetro parametros_adicionales puede ser usado para pasar un parámetro adicional al programa configurado para usarse cuando se envía correo con sendmail_path.

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

Example#4 Envío de correo electrónico HTML

También es posible enviar correo electrónico en formato HTML con mail().

<?php
// múltiples recipientes
$para  'aidan@example.com' ', '// note la coma
$para .= 'wez@example.com';

// asunto
$asunto 'Recordatorios de Cumpleaños para Agosto';

// mensaje
$mensaje '
<html>
<head>
  <title>Recordatorios de Cumpleaños para Agosto</title>
</head>
<body>
  <p>¡Aquí están los cumpleaños que vienen en Agosto!</p>
  <table>
    <tr>
      <th>Persona</th><th>Día</th><th>Mes</th><th>Año</th>
    </tr>
    <tr>
      <td>Juan</td><td>3</td><td>Agosto</td><td>1970</td>
    </tr>
    <tr>
      <td>Sandra</td><td>17</td><td>Agosto</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
'
;

// Para enviar correo HTML, la cabecera Content-type debe definirse
$cabeceras  'MIME-Version: 1.0' "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";

// Cabeceras adicionales
$cabeceras .= 'To: María <maria@example.com>, Kelly <kelly@example.com>' "\r\n";
$cabeceras .= 'From: Recordatorio de Cumpleaños <recordatorio@example.com>' "\r\n";
$cabeceras .= 'Cc: archivo@example.com' "\r\n";
$cabeceras .= 'Bcc: chequeo@example.com' "\r\n";

// Enviarlo
mail($para$asunto$mensaje$cabeceras);
?>

Note: Si desea enviar HTML u otros correos complejos, es recomendable usar el paquete PEAR » PEAR::Mail_Mime.

Notes

Note: La implementación en Windows de mail() difiere en varias formas de la implementación en Unix. Primero, no usa un binario local para componer mensajes, en su lugar opera directamente sobre sockets, lo que quiere decir que se requiere de un MTA que escuche sobre un socket de red (el cual puede estar en el host local o en una máquina remota).
Segundo, las cabeceras personalizadas como From:, Cc:, Bcc: y Date: no son interpretadas por el MTA en primera instancia, son interpretadas por PHP.
Por lo anterior, el parámetro para no debería ser una dirección en la forma "Algo <alguien@example.com>". Puede que el comando de correo no interprete apropiadamente ésto cuando se comunique con el MTA.

Note: Es posible enviar correo electrónico con archivos adjuntos y tipos especiales de contenido (p.ej. HTML) usando esta función. Esto se consigue mediante el uso de codificación MIME - para más información, vea este » artículo de Zend o las » Clases Mime PEAR.

Note: Cabe anotar que la función mail() no es recomendable para el envío de correo electrónico en volumen por medio de un ciclo. Esta función abre y cierra un socket SMTP para cada correo, por lo que no resulta muy eficiente.
Para el envío de grandes cantidades de correo electrónico, vea los paquetes » PEAR::Mail y » PEAR::Mail_Queue.

Note: Los siguientes documentos RFC pueden resultar útiles: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049, y » RFC 2822.

Ver también


Correo
PHP Manual