Ver índice
Mensajes de correo

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Correo electrónico

PHP dispone de una función que permite el envío de todo tipo de mensajes de correo electrónico desde una página web. Son escasos los hosting que tienen activada esta función. El motivo aducido por muchos de ellos para establecer esta restricción es el riesgo de abusos mediante los mensajes conocidos como spam. Como siempre, si tu interés es publicar y tienes necesidad de este servicio, procura consultar sobre la disponibilidad de este servicio.

Requisitos del sistema

La utilización de las funciones de correo electrónico requiere disponer de un servidor de correo electrónico instalado y activo y la modificación de la configuración inicial del fichero php.ini.

Si no tienes instalado este servidor puedes hacerlo ahora. En la página Servidor de correo tienes detallados ambos procesos (instalación y modificación de php.ini).

Sintaxis

La forma más simple de la función de correo es esta:

mail(destinatario,asunto,mensaje)

Dónde destinatario es la dirección del destinatario, asunto es el texto que aparecerá como Asunto en el encabezado que recibirá el destinatario y mensaje el texto que aparecerá en el cuerpo del mensaje.

No te olvides de escribir entre comillas esos tres parámetros de la función.

<?
# insertamos la función mail (rojo) dentro de un condicional
# para tener una confirmación de envio y/o aviso de error
# es algo muy habitual para conocer el exito de la ejecución
# de funciones
  if(mail("juan@mispruebas.as", "Mi primer mensaje","Este es el texto")){
	  print "mensaje enviado";
}else{
	 print "el mensaje no ha podido enviarse";
}
?>  

Mensaje con cabeceras MIME

Una forma más completa es la siguiente:

mail(destario,asunto,mensaje,cabecera)

Como puedes ver, en este caso añadimos un nuevo parámetro a la función (cabez) que debe estar entre comillas y que puede contener, separando con comas, lo siguiente:

  ¡Cuidado!  

Debemos insistir en sugerirte una especial atención a la sintaxis de este tipo de scripts.
Los contenidos generados por la función mail deben ser interpretados por el servidor de correo y –tanto en este caso como en los que veremos a continuación– los requisitos de formato de estos servidores son muy estrictos.
De no adaptarse exactamente a sus especificaciones pueden producirse efectos extraños tales como: envíos incorrectos y/o apariencias indeseadas en los mensajes.

<?
mail("juan@mispruebas.as","Varios destinatarios","Cuerpo del mensaje",
"From: php <juan@mispruebas.as>
Reply-To: andres@mispruebas.as
Cc: perico@mispruebas.as,andres@mispruebas.as
Bcc:andres@mispruebas.as,perico@mispruebas.as
X-Mailer: PHP/" . phpversion());
?>

En el ejemplo anterior insertaremos los nuevos elementos. Observa con mucha atención la estructura del código. Fíjate que hemos insertado en líneas diferentes cada uno de los conceptos: From, Reply-To, etcétera y que no hemos dejado ningún espacio al comienzo de esas líneas.

No es por capricho ni por afán estético. Si insertáramos algún carácter delante de esas líneas se plantearían problemas en la estructura del mensaje y si no incluyéramos un salto de línea para cada uno de los conceptos también tendríamos ese mismo problema.

La sintaxis MIME es muy estricta en este sentido. ¡Tengamos mucho cuidado en esto!

Hay otra posibilidad sintáctica –como alternativa a los saltos de línea– ya conocida. Podríamos escribir todo en una sola línea sustituyendo los saltos de línea que ves aquí por \n, de forma que el script tuviera un aspecto similar al siguiente:

mail("juan@localhost","Asunto","Contenido","\nReply-To: ...\nCc:.....\nBcc: ...") donde, como ves, los \n sustituyen a los saltos de línea.

El mismo ejemplo, utilizando variables

Aquí tenemos un ejemplo donde los parámetros de envío proceden de variables PHP. Recordemos que esas variables pueden transferirse –mediante un formulario– a un script que se encargue de su envío.

Como puedes observar, hemos puesto las direcciones de los destinatarios de las copias –visibles y ocultas– en sendos arrays y hemos añadido una función que: lee los array, los une en una cadena separándolos con comas y, por último, quita la última coma añadida utilizando la función substr.

<?
#variables destinatario, asunto, texto, etc.
$destino="andres@mispruebas.as";
$envia="Andrés PHP";
$remite="andres@mispruebas.as";
$asunto="Mensaje experimental";
$texto="Esto es una prueba. No es spam";

#array de destinatarios de copias visibles

$c[0]="perico@mispruebas.as";
$c[1]="juan@mispruebas.as";

#crear la cadena con las direcciones
# y añadir las comas de separación
$cco=""; //creamos la variable (vacia)
foreach($c as $pegar) {
$cco .=$pegar;
$cco.=",";
};

#quitamos la coma del final de la cadena

$l=strlen($cco);

$cco=substr($cco,0,$l-1); 

#array de destinatarios de copias OCULTAS

$b[0]="perico@mispruebas.as";
$b[1]="andres@mispruebas.as";

#crear la cadena con las direcciones
# y añadir las comas de separación
$bco=""; //creamos la variable (vacia)
foreach($b as $pegar) {
$bco .=$pegar;
$bco.=",";
};

#quitamos la coma del final de la cadena

$l=strlen($bco);

$cco=substr($bco,0,$l-1);

mail($destino, $asunto, $texto,
"From: $envia <$remite>
Reply-To: $remite
Cc: $cco
Bcc:$bco
X-Mailer: PHP/" . phpversion());
 ?>