🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PHP 8
  3. Enviar un correo electrónico
Extrait - PHP 8 Desarrolle un sitio web dinámico e interactivo (2a edición)
Extractos del libro
PHP 8 Desarrolle un sitio web dinámico e interactivo (2a edición) Volver a la página de compra del libro

Enviar un correo electrónico

Información general

Un sitio interactivo a menudo necesita enviar correos electrónicos a los usuarios, por ejemplo, para confirmar una compra, un registro o enviar un boletín de noticias.

La función mail, propuesta por PHP, permite responder de manera simple a este tipo de necesidad. En esta sección se explica cómo utilizar esta función; en primer lugar, para enviar mensajes de texto (sin datos adjuntos) y, a continuación, para enviar mensajes en formato MIME (Multipurpose Internet Mail Extensions).

Además, PHP ofrece una biblioteca potente, pero más compleja de usar, para gestionar mensajes mediante el protocolo IMAP (Internet Message Access Protocol). Esta biblioteca no se tratará en este libro, ya que no es esencial para satisfacer las necesidades descritas anteriormente.

Enviar un mensaje de texto sin archivos adjuntos

La función mail permite enviar un mensaje de correo electrónico.

Sintaxis

booleano mail(cadena destinatario, cadena objeto, cadena mensaje 
[, cadena encabezado]) 

destinatario

Dirección de correo electrónico del destinatario. Es posible especificar varios destinatarios separados con comas.

objeto

Asunto del mensaje.

mensaje

Texto del mensaje.

encabezado

Encabezados adicionales, en forma de cadena de caracteres o de una tabla.

La función mail envía el mensaje caracterizado por los diferentes parámetros a un servidor de correo definido por las directivas de configuración siguientes:

Win32

SMTP

Dirección del servidor SMTP (Simple Mail Transfer Protocol) al cual enviar el mensaje.

Ejemplo: smtp.wanadoo.es

sendmail_from

Dirección de correo electrónico del remitente. Ejemplo: webmaster@misitio.com

Esta directiva debe estar presente, incluso aunque esté vacía.

Unix

sendmail_path

Ruta de acceso al ejecutable del servidor de correo (puede incluir parámetros).

Ejemplo: sendmail -t -i

La función mail devuelve TRUE si el mensaje se ha podido enviar al servidor (lo cual no garantiza que este último haya podido enviarlo con éxito) y FALSE en caso contrario. No hay manera de saber si el mensaje ha sido enviado con éxito; esta verificación debe llevarse a cabo fuera de PHP.

El cuarto parámetro permite especificar información adicional que se envía en el encabezado del mensaje (From, Reply-To, etc.). El caso de utilizar una cadena de caracteres, la...

Enviar un mensaje en formato MIME

1. Preámbulo

En esta sección vamos a explicar cómo enviar mensajes con formato MIME, o más generalmente en formato Multipart MIME.

El formato MIME permite enviar un mensaje con un formato diferente al de texto: HTML, imágenes...

El formato Multipart MIME permite enviar un mensaje compuesto de varias partes, cada una con un formato diferente (texto más una imagen, por ejemplo) y una de las "partes" puede ser un archivo adjunto.

El objetivo de este punto, sin entrar en detalles sobre el formato MIME (se puede encontrar más información en los numerosos RFC que tratan este tema), es mostrar concretamente cómo proceder en dos casos típicos, el envío de un mensaje en formato HTML y el envío de un mensaje con datos adjuntos.

2. Mensaje en formato HTML

El caso del envío de un mensaje en formato HTML permite ilustrar el uso del formato MIME simple.

Ejemplo (fuente de un mensaje MIME en formato HTML)

From: "Olivier" <olivier@diane.com> 
To: "Xavier" <xavier@zeus.es> 
Subject: ¡Hola! 
Date: Mon, 10 Sep 2001 09:24:13 -0100 
Message-ID: <3b9c6a403d9f000b@hermes.diane.com> 
MIME-Version: 1.0 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: 8bit 
 
<html> 
<head><title>¡Hola!</title></head> 
<body> 
<font color="green">¡Hola!</font> 
</body> 
</html> 

Un mensaje MIME simple incluye los encabezados estándar de un mensaje; a continuación, tres líneas de encabezados adicionales (en negrita) que indican que el mensaje está en formato MIME y, finalmente, el cuerpo del mensaje propiamente dicho. 

Las tres líneas de encabezados adicionales son las siguientes:

MIME-Version

Indica que el mensaje está en formato MIME y especifica la versión.

Content-Type

Indica el tipo MIME del contenido.

Content-Transfer-Encoding

Indica el tipo de cifrado.

Algunos tipos MIME habituales:

text/plain

Texto simple. El juego de caracteres utilizado se puede especificar con la opción charset (por ejemplo, iso-8859-1 o UTF-8).

text/html

Documento en formato HTML El juego de caracteres utilizado se puede especificar con la opción charset (por ejemplo, iso-8859-1 o UTF-8).

image/jpeg...

Ejercicio 15: enviar un correo electrónico

En este ejercicio, vamos a crear un formulario que permita enviar un mensaje electrónico.

Indicaciones:

  • En un nuevo directorio, cree un nuevo script PHP mail.php. En este nuevo script, rellene el código HTML que permita mostrar una página HTML llamada «Nuevo mensaje», conteniendo un formulario con el siguiente aspecto:

images/20.png
  • Los campos «A», «De» y «Asunto» son de tipo texto, con un tamaño de 40, y se llaman respectivamente a, de y asunto (atributo name). El campo «Texto» es de tipo textArea, de tamaño 20 líneas y 80 columnas y se llama texto (atributo name). El botón «Enviar» se llama ok (atributo name). La alineación de los campos se obtiene gracias a la utilización del código CSS aplicado a las etiquetas <label> (el diseño del formulario es secundario en la realización de este ejercicio).

  • Este formulario se tratará por el script PHP mail.php.

  • Al inicio del script, inserte una sección de código PHP que compruebe si el script se llama durante el tratamiento del formulario; si es el caso:

  • Recupere el contenido de los campos en las variables.

  • Defina una variable de tipo tabla que va a contener los encabezados adicionales enviados en el mensaje.

  • Envíe el mensaje.

Ejemplo

<?php  
// Tratamiento del formulario.  
if (isset($_POST['ok']))...