Usando PHPMailer

Vamos a aprender a mandar correos usando PHPMailer, PHPMailer nos presenta la ventaja que podemos mandar correos a un servidor SMTP solo debemos conocer el nombre o la IP, o bien mandar correos a localhost y adjuntar archivos, empezaremos disenando un formulario simple para el envio de correos:

<form action="contact.php" method="post">
<b>Para:</b><br /><select name="area">
<option value="correo1@micorreo.com">Correo 1</option>
<option value="correo2@micorreo.com">Correo 2</option></select><br />
<b>Nombre:</b><br>
<input name="nombres" type="text" /><br />
<b>Asunto:</b><br />
<input name="empresa" type="text"><br><b>E-mail:</b><br>
<input name="email" type="text"><br />
<b>Comentarios:</b><br>
<textarea name="comentarios" cols="50" rows="5"></textarea><br>
<input name="action" type="hidden" value="send">
<input name="enviar" type="submit" value="Enviar">
</form>


Las acciones las vamos a ejecutar en la pagina "contact.php", ahora bien.. descargamos las clases del pagina principal de PHPMailer solo nos interesan dos:

  • class.phpmailer
  • class.smtp
Ahora empezaremos a contruir nuestra pagina PHP que se encargara de mandar los correos, iniciamos con los datos que vamos a incluir en el mail:

$nombre = $_REQUEST["nombres"];
$asunto = $_REQUEST["empresa"];
$email = $_REQUEST["email"];
$comentarios = $_REQUEST["comentarios"];
$dest = $_POST["area"];

Estos datos son obtenidos del formulario que creamos al inicio, luego usando estos datos contruimos el mensaje:

$msg.= "De: ".$_POST['nombres']."\n";
$msg.= "Asunto: ".$_POST['empresa']."\n";
$msg.= "Email: ".$_POST['email']."\n";
$msg.= "Hora: ".date("h:i:s a ")."\n";
$msg.= "Fecha: ".date("D, d M Y")."\n";
$msg.= "------------------------------- \n\n";
$msg.= $comentarios;
$msg.= "\n\n------------------------------- \n";
$msg.= " Mensaje creado por PhpMailer \n";

Ahora importamos los archivos de PHPMailer (yo los tengo un una carpeta llamada "includes"), creamos un objeto, le ponemos las propiedades conforme nuestra configuracion y lo enviamos:

require("includes\\class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "192.168.184.131";
$mail->From = $email;
$mail->FromName = $nombre;
$mail->AddAddress($_POST["area"]);
$mail->Subject = $asunto;
$mail->Body = $msg;

Finalmente lo enviamos

if(!$mail->Send()) {
echo "<script>alert('Error:\n'.$mail->ErrorInfo')</script>";
echo '<script>window.location = "index.php"</script>'; }
else {
echo "<script>alert('Mensaje enviado')</script>";
echo '<script>window.location = "index.php"</script>'; }

Si existiese algun error tambien lo mostramos con ayuda de javascript.

10 comentarios:

  Gilberto M.

4 de enero de 2010, 8:08

hola amigo ces's si descargo y uso tu script asi como esta trabajar o debo de configurara algunos datos mios en el codigo

  Ces

4 de enero de 2010, 16:26

si de hecho en el archivo:

contact.php

debes actualizar el lugar donde tienes tu clase de php mailer:
require("includes\\class.phpmailer.php");

y tambien la IP de tu servidor:
$mail->Host = "192.168.184.131";

todo lo demas es simple codigo html para llenar formulario,

saludos

  Anónimo

4 de enero de 2010, 16:46

amigo ces queria preguntrte algo mas si no es mucha molestia. si yo quiero para enviar correo anonimo por este metodo en vez en le campo de la ip que debo de colocar podria ser smtp1.google.com ?
ys era que por este metodo de envio los mensajes llegarian a la bandeja de entrada de hotmail ? voz sabes que por los filtros que ahora estan reforzados ya es muy dificil que llegue
muchas gracias estoy muy interesado en el tema espero tu respuesta

  Ces

6 de enero de 2010, 18:00

no se si se podran enviar correos anonimos, no he probado hacerlo pero talvez estas referencias te ayuden:

http://www.forosdelweb.com/f18/envio-mail-anonimo-phpmailer-para-hotmail-766601/

http://www.taringa.net/posts/ebooks-tutoriales/3241234/Hac%C3%A9-tu-propio-mailbomber-an%C3%B3nimo.html

saludos

  Anónimo

19 de mayo de 2011, 6:54

Estoy implementando el código en un formulario, pero se al darle a enviar se abre en una ventana nueva el archivo contact.php.

Puedes verlo en: http://gadebs.es/test/contacto.php

Por favor, dime que puede estar pasando...

Muchas gracias

  Ces

19 de mayo de 2011, 7:01

el problema es que la pagina no existe..

"Not Found

The requested document was not found on this server.
Web Server at gadebs.es"

si te das cuenta en el ejemplo, las acciones se ejecutan en:

form action="contact.php" method="post"

pero tu pagina es: "contacto.php"

podrias probar en el form cambiar contact por contacto, ya que el problema es que no encuentra la pagina contact.php

saludos

  Anónimo

19 de mayo de 2011, 7:39

Gracias por tu respuesta, pero el problema no esta ahí...

El código que hace referencia al archivo de configuración:
action="http://www.gadebs.es/test/contenido/extras/contact.php" method="post">


Pero al darle a enviar no envía si no que abre la página...


Gracias

  Pedro Roman

19 de mayo de 2011, 7:52

Este comentario ha sido eliminado por el autor.
  Anónimo

19 de mayo de 2011, 7:52

como podría arreglar eso?


Muchas gracias

  Ces

20 de mayo de 2011, 6:27

acabo de probar de nuevo la pagina y parece que ya lo arreglaste