Como enviar un correo electrónico desde Localhost con PHP

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:

  1. Inicia sesión en tu cuenta de Google.
  2. Accede a la página Configuración de las aplicaciones menos seguras: https://myaccount.google.com/lesssecureapps
  3.  En la sección “permitir el acceso de aplicaciones menos seguras“, selecciona Activar como en la imagen siguiente:

Acceso a aplicaciones menos seguras gmail

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.

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.

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.

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.

 

  • jamarchi

    Hola, mi interesa este tema y probé el script para no me funcionó, estoy usando WAMP pero no recibo los correo, que puede ser? gracias

    • Obed

      Por favor lee detenidamente el tutorial, si sigues paso a paso el tutorial, en teoria debe funcionar, recuerda que debes usar las credenciales de inicio de sesion de un correo de gmail.

      • jamarchi

        Hola, vieras que nop, ya lo vi dos veces mas y no sirve, es que los únicos cambios que hay que hacer es en la cuenta de gmail, y las lineas 41,42,43, hago lo que dicen y lo pruebo pero no recibo nada

        • Obed

          Ademas de configurar las 3 variables que se menciona en el tutorial, debes acceder a tu cuenta de google y permitir el acceso a aplicaciones menos seguras: https://myaccount.google.com/lesssecureapps

          Así es el mensaje que envía desde localhost https://uploads.disquscdn.com/images/8deaa07341ae60f2e4c6ee25b00d6bfa42936da0958b8a1c4dcd6846cb03a771.png

          • jamarchi
          • Obed

            Te lanza algún mensaje de error?

          • jamarchi

            No, vi el código y deberia de enviar un mensaje sin embargo no lo muestra

          • Obed

            Reemplaza el archivo sendemail.php por este:

            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 ‘No se pudo enviar el mensaje..’;
            echo ‘Error de correo: ‘ . $mail->ErrorInfo;
            echo “”;
            } else {
            echo ‘Tu mensaje ha sido enviado!’;
            }
            }
            ?>

          • Obed

            La etiqueta de comentarios no esta cerrada en el archivo sendemail.php
            https://uploads.disquscdn.com/images/dc486502093c3f1049acc0beedb960e261a284483f93289fe0ad9e8d2042ca7c.png

            ya lo he corregido

          • jamarchi

            Ah ok, deje el archivo original y cerré el comentario, ahora me salio este error
            No se pudo enviar el mensaje..Error de correo: Extension missing: openssl

          • Obed

            Cambia la extensión ;extension=php_openssl.dll a extension=php_openssl.dll en tu archivo php.ini Luego reinicia el servidor apache.
            https://uploads.disquscdn.com/images/544f071aa1088682d18ba2ac074e0191c82d99ddc061ca917bb6dad15a3f77fb.png

          • jamarchi

            Hola, vieras que me salio un error de que no podia cargar el smtp, me dio un link en donde sugirío usar algo asi $mail->Host = ‘tls://smtp.gmail.com:587’;
            lo probé y ya funciono al 100%. Muchas gracias por tu ayuda

          • Obed

            Es un placer, muchas gracias a ti por leernos!

  • Abraham

    Hola, muy interesante lo estoy probando, lo unico al querer descargar me dice archivo dañado.

    • Obed

      Hola, gracias por notificarme que el archivo esta dañado, lo he vuelto a subir, actualiza la pagina e intenta realizar la descarga nuevamente

  • Alders

    Me da este error:
    No se pudo enviar el mensaje..Error de correo: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

    • Obed

      Error en la conexión SMPT, asegúrate incluir los datos de conexión de tu correo gmail

      • Alders

        hice todo tal cual, no se que mas debo configurar

        • Alders

          Listo, era solo el antivirus!

  • Douglas Xia

    donde esta el link de descarga