Bueno, la espera ha terminado, hace muchos varios meses escribimos en nuestra fans page Sistemas Web que se publicaría este artículo, pero debido a la carga de trabajo que hemos tenido estos meses atras, la publicación de este post se hizo esperar, pero bien aquí está nuestro tutorial: Como enviar un correo electrónico desde Localhost con PHP.
Como enviar un correo electrónico desde Localhost con PHP
La mayoría de los proyectos web tienen la funcionalidad de envío de correo electrónico, sin embargo es necesario hacer pruebas antes de subirlo a un servidor en producción para comprobar la funcionalidad del correo añadida a nuestra aplicación web, dichas pruebas deben hacerse de manera local, pero la función mail() de PHP, no funciona en servidores locales. Es por tal razón que en este artículo, les mostraremos cómo enviar correo un electrónico desde localhost con PHP. Usando este simple script PHP puedes enviar correo electrónico desde cualquier servidor localhost, como XAMPP, WAMP, o cualquier otro.
Haremos uso de PHPMailer para ayudarnos a enviar el correo electrónico desde localhost; no sólo un correo electrónico de tipo texto, ya que hemos diseñado un formulario de contacto para la captura de datos para agregarle dinamismo a nuestro script PHP con la capacidad de poder enviar el email en formato HTML desde localhost usando PHPMailer. Puedes descargar PHPMailer desde GitHub, pero recuerda que al finalizar este post puedes obtener todo el paquete de archivos a través del enlace de descarga que te proporcionaremos.
Para este tutorial usaremos el servidor SMTP de Gmail, para ello se debe permitir el acceso de aplicaciones menos seguras. Sigue los pasos a continuación:
- Inicia sesión en tu cuenta de Google.
- Accede a la página Configuración de las aplicaciones menos seguras: https://myaccount.google.com/lesssecureapps
- En la sección “permitir el acceso de aplicaciones menos seguras“, selecciona Activar como en la imagen siguiente:
Lo que haremos
1- Crear el archivo llamado index.php, el cual contiene el código html y css para crear un hermoso formulario, para la captura de datos.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<!--Author: Obed Alvarado Author URL: http://obedalvarado.pw License: Creative Commons Attribution 3.0 Unported License URL: http://creativecommons.org/licenses/by/3.0/ --> <!DOCTYPE HTML> <html> <head> <title>Como Enviar un correo electrónico desde Localhost con PHP | Sistemas Web</title> <!-- Custom Theme files --> <link href="css/style.css" rel="stylesheet" type="text/css" media="all"/> <!-- Custom Theme files --> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="keywords" content="" /> <!--Google Fonts--> <link href='http://fonts.googleapis.com/css?family=Roboto+Condensed:400italic,700italic,400,300,700' rel='stylesheet' type='text/css'> <!--Google Fonts--> </head> <body> <!--coact start here--> <h1>Formulario de contacto</h1> <div class="contact"> <div class="contact-main"> <form method="post"> <h3>Tu correo electrónico</h3> <input type="email" placeholder="your@email.com" class="hola" name="customer_email" required /> <h3>Tu nombre</h3> <input type="text" placeholder="Your name" class="hola" name="customer_name" required /> <h3>Asunto</h3> <input type="text" placeholder="Subject" class="hola" name="subject" required /> <h3>Mensaje</h3> <textarea name="message" placeholder="Leave your message here ...." required /></textarea> <?php if (isset($_POST['send'])){ include("sendemail.php");//Mando a llamar la funcion que se encarga de enviar el correo electronico /*Configuracion de variables para enviar el correo*/ $mail_username="";//Correo electronico saliente ejemplo: tucorreo@gmail.com $mail_userpassword="";//Tu contraseña de gmail $mail_addAddress="info@obedalvarado.pw";//correo electronico que recibira el mensaje $template="email_template.html";//Ruta de la plantilla HTML para enviar nuestro mensaje /*Inicio captura de datos enviados por $_POST para enviar el correo */ $mail_setFromEmail=$_POST['customer_email']; $mail_setFromName=$_POST['customer_name']; $txt_message=$_POST['message']; $mail_subject=$_POST['subject']; sendemail($mail_username,$mail_userpassword,$mail_setFromEmail,$mail_setFromName,$mail_addAddress,$txt_message,$mail_subject,$template);//Enviar el mensaje } ?> </div> <div class="enviar"> <div class="contact-check"> </div> <div class="contact-enviar"> <input type="submit" value="Enviar mensaje" name="send"> </div> <div class="clear"> </div> </form> </div> </div> <div class="copyright"> <p>Template by <a href="http://w3layouts.com/" target="_blank"> W3layouts </a></p> </div> <!--contact end here--> </body> </html> |
Para crear dicho formulario nos hemos ayudado de una plantilla que la podras encontrar en la siguiente dirección: https://w3layouts.com/shade-flat-contact-form-widget-template/, dicha plantilla contiene los archivos css y html para crear nuestro formulario, pero le hemos modificado para usarla según nuestros requerimientos.
El archivo index.php, contiene ademas un fragmento de código PHP, el cual se encarga de capturar las variables enviadas por POST, llamar nuestra función que se encargará de enviar nuestro email.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php if (isset($_POST['send'])){ include("sendemail.php");//Mando a llamar la funcion que se encarga de enviar el correo electronico /*Configuracion de variables para enviar el correo*/ $mail_username="";//Correo electronico saliente ejemplo: tucorreo@gmail.com $mail_userpassword="";//Tu contraseña de gmail $mail_addAddress="info@obedalvarado.pw";//correo electronico que recibira el mensaje $template="email_template.html";//Ruta de la plantilla HTML para enviar nuestro mensaje /*Inicio captura de datos enviados por $_POST para enviar el correo */ $mail_setFromEmail=$_POST['customer_email']; $mail_setFromName=$_POST['customer_name']; $txt_message=$_POST['message']; $mail_subject=$_POST['subject']; sendemail($mail_username,$mail_userpassword,$mail_setFromEmail,$mail_setFromName,$mail_addAddress,$txt_message,$mail_subject,$template);//Enviar el mensaje } ?> |
Nota muy importante: en la linea 41 de nuestro archivo index.php, debemos establecer un valor a la variable $mail_username=””; el cual debe ser la dirección de correo electrónico desde donde enviaremos nuestros email; en la linea 42 debemos establecer el valor de la variable $mail_userpassword=””; que corresponde a la contraseña de la dirección de correo electrónico que usaremos para enviar los correos; en la linea 43 debes establecer el valor a la variable $mail_addAddress=””; que corresponde a el correo electrónico al cual se enviará los datos ingresados desde el formulario.
2- Ahora crearemos un archivo llamado sendemail.php, el cual contiene una función también llamada sendemail, dicha función es la que se realiza el proceso de envío de datos desde nuestro servidor local a una dirección de correo electrónico.
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 32 33 34 35 |
<!--Author: Obed Alvarado Author URL: http://obedalvarado.pw License: Creative Commons Attribution 3.0 Unported License URL: http://creativecommons.org/licenses/by/3.0/ !--> <?php function sendemail($mail_username,$mail_userpassword,$mail_setFromEmail,$mail_setFromName,$mail_addAddress,$txt_message,$mail_subject, $template){ require 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); // Establecer el correo electrónico para utilizar SMTP $mail->Host = 'smtp.gmail.com'; // Especificar el servidor de correo a utilizar $mail->SMTPAuth = true; // Habilitar la autenticacion con SMTP $mail->Username = $mail_username; // Correo electronico saliente ejemplo: tucorreo@gmail.com $mail->Password = $mail_userpassword; // Tu contraseña de gmail $mail->SMTPSecure = 'tls'; // Habilitar encriptacion, `ssl` es aceptada $mail->Port = 587; // Puerto TCP para conectarse $mail->setFrom($mail_setFromEmail, $mail_setFromName);//Introduzca la dirección de la que debe aparecer el correo electrónico. Puede utilizar cualquier dirección que el servidor SMTP acepte como válida. El segundo parámetro opcional para esta función es el nombre que se mostrará como el remitente en lugar de la dirección de correo electrónico en sí. $mail->addReplyTo($mail_setFromEmail, $mail_setFromName);//Introduzca la dirección de la que debe responder. El segundo parámetro opcional para esta función es el nombre que se mostrará para responder $mail->addAddress($mail_addAddress); // Agregar quien recibe el e-mail enviado $message = file_get_contents($template); $message = str_replace('{{first_name}}', $mail_setFromName, $message); $message = str_replace('{{message}}', $txt_message, $message); $message = str_replace('{{customer_email}}', $mail_setFromEmail, $message); $mail->isHTML(true); // Establecer el formato de correo electrónico en HTML $mail->Subject = $mail_subject; $mail->msgHTML($message); if(!$mail->send()) { echo '<p style="color:red">No se pudo enviar el mensaje..'; echo 'Error de correo: ' . $mail->ErrorInfo; echo "</p>"; } else { echo '<p style="color:green">Tu mensaje ha sido enviado!</p>'; } } ?> |
Bien, esto sería todo para enviar un correo electrónico desde localhost con PHP, te invitamos a que descargues el código fuente y que si tienes alguna inquietud respecto al código de este tutorial, por favor deja un comentario en la sección de comentarios de este artículo.