Í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 AJAXCorreo 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:
<? 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()); ?>