Enviar

Enviar mail desde localhost con PHPMailer

Hugui Dugui

En este ejemplo vamos a enviar desde localhost un mail con un archivo adjunto usando la librería PHPMailer con SMTP con tu cuenta de gmail para el envío. Este turorial lo hice cuando recién empezaba a programar y no contaba con un dominio, esto quiere decir que la función mail() nativa de php no funciona en localhost.

Comencemos haciendo un formulario con 4 campos como el siguiente: (no hagan caso a los colores, no soy diseñador xD)

El código de la imagen es:

<!DOCTYPE html>
<html>
   <head>
      <title>huguidugui.wordpress.com</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
      <link rel="stylesheet" type="text/css" href="css/estilos.css">
      <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
   </head>
   <body>
      <div class="wrap">
         <header>
            Enviar mail desde localhost con PHP Mailer
         </header>
         <section id="principal">
            <form id="formulario" method="post" action="php/enviar.php" enctype="multipart/form-data">
               <div class="campos">
                  <label>Para:</label>
                  <input type="email" name="email" required>
               </div>
               <div class="campos">
                  <label>Asunto:</label>
                  <input type="text" name="asunto">
               </div>
               <div class="campos">
                  <label>Mensaje:</label>
                  <textarea name="mensaje"></textarea>
               </div>
               <label>Imagen:</label>
               <input type="file" name="hugo" id="imagen" />
               <input id="submit" type="submit" name="enviar" value="Enviar mail">
            </form>
         </section>
      </div>
   </body>
</html>


Como vemos en el action del formulario, lo dirige a enviar.php, este se encargará de tomar los campo con POST ('para', 'asunto' y 'mensaje'), FILES para obtener el archivo cargado y finalmente hacer el envío del mail con phpmailer, aquí el código:

<?php
//Librerías para el envío de mail
include_once('class.phpmailer.php');
include_once('class.smtp.php');
 
//Recibir todos los parámetros del formulario
$para = $_POST['email'];
$asunto = $_POST['asunto'];
$mensaje = $_POST['mensaje'];
$archivo = $_FILES['hugo'];
 
//Este bloque es importante
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
 
//Nuestra cuenta
$mail->Username ='ponerTuCuentaDeMail@gmail.com';
$mail->Password = '*******'; //Su password
 
//Agregar destinatario
$mail->AddAddress($para);
$mail->Subject = $asunto;
$mail->Body = $mensaje;
//Para adjuntar archivo
$mail->AddAttachment($archivo['tmp_name'], $archivo['name']);
$mail->MsgHTML($mensaje);
 
//Avisar si fue enviado o no y dirigir al index
if($mail->Send())
{
    echo'<script type="text/javascript">
            alert("Enviado Correctamente");
            window.location="http://localhost/maillocal/index.php"
         </script>';
}
else{
    echo'<script type="text/javascript">
            alert("NO ENVIADO, intentar de nuevo");
            window.location="http://localhost/maillocal/index.php"
         </script>';
}
?>

Listo, espero que te sea de ayuda. Si quieres puedes escribirme a ringhugos@gmail.com o al whatsapp para cualquier comentario o duda que tengas sobre este tutorial. Recuerda que puedes bajar el ejemplo completo en el siguiente enlace: Ejemplo completo de phpmailer para enviar mail desde localhost

Muchas gracias por leer el blog :D