Icono del sitio Tursos

PHP desde cero: Introducción a la función mail

En este tutorial de PHP, aprenderás a usar la función mail(), que sirve para enviar correos electrónicos, veremos 3 ejemplos: uno es el del uso mas basico de la funcion, el segundo que llevara etiquetas HTML en el mensaje y el ultimo que recibirá los datos a enviar desde un formulario en HTML.

Teoría:

La sintaxis de la funciona mail es bastante sencilla, solo tenemos que indicarle mediante comas los siguientes valores:

mail(recipiente, asunto, mensaje, encabezado, parametros);

Ejemplos

Aviso: estos ejemplos solo funcionaran en un servidor que pueda enviar correos, esto quiere decir que no van a funcionar en tu servidor local a menos que tengas un SMTP instalado, lo recomendable es que se pruebe en hostings reales, puedes ver una lista de 7 hostings gratuitos que te pueden servir para probar estos ejemplos.

Ejemplo 1: Lo básico

En este ejemplo veremos el uso mas básico de la función mail().

<?php
mail('ejemplo@tursos.com', 'Ejemplo de Mail', 'Este mensaje es enviado desde un script de PHP.', 'From: Juan Perez <Juan@Perez.com>');
?>

Otra forma de hacerlo mas ordenado es usando variables:

<?php
$recipiente = 'tu@email.com';
$asunto = 'Ejemplo de Mail';
$mensaje = 'Este mensaje es enviado desde un archivo de PHP';
$encabezado = 'From: Juan Perez <Juan@Perez.com>';

mail($recipiente, $asunto, $mensaje, $encabezado);
?>

Ejemplo 2: Mensaje HTML

Este otro ejemplo llevara un mensaje con etiquetas HTML, para que acepte código HTML necesitamos agregar un ‘Content-type’ en el encabezado:

<?php
$encabezado =  'MIME-Version: 1.0' . "\r\n";
$encabezado .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
?>

Nota: ‘\r\n’ se usa para hacer saltos de linea.

El código final seria el siguiente:

<?php
$recipiente = 'tu@email.com';
$asunto = 'Ejemplo de Mail';
$mensaje = 'Este mensaje tiene <i>etiquetas</li> HTML y es enviado desde un <strong>script</strong> de PHP';

$encabezado =  'MIME-Version: 1.0' . "\r\n";
$encabezado .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$encabezado .= 'From: Juan Perez <Juan@Perez.com>' . "\r\n";

mail($recipiente, $asunto, $mensaje, $encabezado);
?>

Ejemplo 3 Formulario

En este ultimo ejemplo aplicaremos lo aprendido en este tutorial de PHP, se reciben los datos mediante $_POST desde un formulario en HTML, pasamos estos datos a PHP y se envia el correo.

<form id="form1" method="post">
     Asunto:<br />
     <input id="asunto" name="asunto" size="75" type="text" />
     <br />Recipiente :<br />
     <input id="recipiente" name="recipiente" size="75" type="text" />
     <br />Mensaje:<br />
     <textarea id="mensaje" cols="100" rows="20" name="mensaje"></textarea><br />
     <input id="enviar" name="enviar" type="submit" value="  Enviar  " />
</form>

Después ingresamos este código PHP justo debajo del formulario, incluye validación de campos (mirar comentarios)

Nota: para que funcione este ejemplo, tienes que poner tanto el codigo HTML de arriba como el codigo PHP de abajo en un solo archivo.

<?php
if(isset($_POST['enviar'])) //Preguntamos si se presiono el boton de submit
{
     //Recibimos las variables
     $recipiente = $_POST['recipiente']; 
     $asunto = $_POST['asunto'];
     $mensaje = $_POST['mensaje'];

     $encabezado = 'MIME-Version: 1.0' . "\r\n";
     $encabezado .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     $encabezado .= 'From: Juan Perez <Juan@Perez.com>' . "\r\n";

     // substr_count
     // se le pone @ adelante del substr_count para ignorar los errores.

     if(@substr_count($recipiente,'@') == 1){ // Validacion de correo escrito correctamente
          if($asunto == '' or $mensaje == '' or  $recipiente == '' ) // Validacion de campos sin rellenar
          {
               echo '<strong>Campos vacios, por favor llene los campos</strong>';
          }
          else
          {
               mail($recipiente, $asunto, $mensaje, $encabezado);
               echo "<strong>Se envio correctamente</strong>";
          }
     }
     else
     {
          echo "<strong>Email es incorrecto</strong>";
     }
}
?>