Enviar correos con PHP es una de las cosas más comunes de hacer con PHP ya sea para enviar formularios de contacto, enviar correos para verificar el correo del usuario, enviar notificaciones y un largo etc.

La forma más sencilla de enviar correos es con una simple línea de código usando el comando mail de PHP el problema es que aunque funciona lo más probable es que nuestro correo llegará no sólo a la carpeta de no deseados sino que gmail o hotmail lo pondrán con unos mensajes de advertencia que espantarán a cualquier usuario.

Un último aspecto que debemos considerar es que desde localhost no se pueden enviar correos ya que ningun paquete como wamp, xamp, appserve u otro instalan un servidor de correo (ya queda a criterio de cada uno montar el suyo).

Envio simple de correo

Esta línea permite enviar un correo de la forma más simple

1
2
3
4
/// nuestro mensaje
$message = "Este es el cuerpo de nuestro correo";
/// enviar mail
mail('usuario@mail.com', 'Mi subject', $message);

Este comando mail tiene muchisimos parámetros más, especialmente en cuanto a encabezados(headers), archivos adjuntos, enviar correos HTML etc.

Enviar un correo usando PHPMailer

Como dije antes el comando mail tiene muchisimos parámetros adicionales pero salvo que tengamos conocimientos avanzados suele ser un tanto complicado usarlo por lo que recomiendo una clase llamada PHPMailer que nos haga la vida más simple, la pueden bajar AQUI

Veamos ahora un ejemplo de envío de correo usando esta clase

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// Incluimos la clase
require_once('class.phpmailer.php');
$mail             = new PHPMailer(); // creamos el nuevo objeto
/// cogemos el mensage de un archivo html
$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);
/// indicamos quien lo envia
$mail->SetFrom('name@yourdomain.com', 'First Last');
/// con copia a
$mail->AddReplyTo("name@yourdomain.com","First Last");
/// el mensaje es para
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");
/// titulo o subject
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";
/// si no tienes un correo HTML
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
/// asignamos el mensaje
$mail->MsgHTML($body);
/// agregamos 2 archivos adjuntos
$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
/// finalmente lo enviamos
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

?>

Esta clase tiene más funciones pero este ejemplo me parece que cubre las principales, para hacerlo funcionar con un formulario bastaría crear dicho formulario con los campos nombre, correo, cuerpo, mensaje y luego en el ejemplo reemplazar con las variables POST que corresponda, por ejemplo en vez de:

1
2
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

Seria algo como esto

1
2
$address = $_POST['email'];
$mail->AddAddress($address, $_POST['nombre']);