
En años anteriores publicamos un tutorial sobre cómo enviar correos electrónicos desde localhost usando PHP. Sin embargo, desde entonces muchas cosas han cambiado: Google eliminó el acceso para aplicaciones menos seguras, PHPMailer evolucionó, Composer se convirtió prácticamente en un estándar y las prácticas modernas de seguridad ahora son indispensables.
Por esa razón hemos decidido actualizar completamente esta guía para 2026, utilizando las herramientas y métodos recomendados actualmente para enviar correos electrónicos desde un entorno local como XAMPP o WAMP.
Cómo enviar correos electrónicos desde localhost con PHP y PHPMailer en 2026
La mayoría de los proyectos web requieren enviar correos electrónicos, ya sea desde formularios de contacto, sistemas de recuperación de contraseña, notificaciones o comprobantes automáticos.
Aunque muchos desarrolladores utilizan la función mail() de PHP, actualmente no es la mejor opción porque:
- No funciona correctamente en localhost.
- Muchos hostings bloquean el envío directo.
- Los correos suelen llegar a spam.
- No ofrece autenticación SMTP moderna.
- Google eliminó el acceso mediante aplicaciones menos seguras.
Por esa razón utilizaremos PHPMailer junto con el servidor SMTP de Gmail.
Lo que utilizaremos en este tutorial
- PHP 8+
- PHPMailer
- Composer
- Gmail SMTP
- App Password de Google
- XAMPP o WAMP
1- Instalar PHPMailer con Composer
Actualmente la forma correcta de instalar PHPMailer es utilizando Composer.
Abre la terminal dentro de tu proyecto y ejecuta:
composer require phpmailer/phpmailer
Composer descargará automáticamente PHPMailer y todas sus dependencias.
2- Configurar Gmail para permitir SMTP
Google ya no permite usar la contraseña normal de Gmail para enviar correos desde aplicaciones externas.
Ahora es obligatorio utilizar una Contraseña de aplicación (App Password).
Activar la verificación en dos pasos
Primero debes activar la autenticación en dos pasos desde:
https://myaccount.google.com/security
Crear una App Password
Luego accede a:
https://myaccount.google.com/apppasswords
Selecciona:
- Aplicación: Correo
- Dispositivo: Otro
Google generará una contraseña similar a esta:
abcd efgh ijkl mnop
Importante: esa contraseña será utilizada en PHPMailer, NO tu contraseña real de Gmail.
3- Crear el archivo index.php
El siguiente archivo contiene un formulario moderno utilizando Bootstrap 5 y el código PHP encargado de capturar los datos enviados por el usuario.
<!DOCTYPE html> <html lang="es"> <head><meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Enviar correos desde localhost con PHP y PHPMailer</title>
<!-- Bootstrap 5 --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons --> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
<style>
body{ background: #f4f6f9; min-height: 100vh; display: flex; align-items: center; }
.contact-card{ border: none; border-radius: 20px; overflow: hidden; box-shadow: 0 10px 35px rgba(0,0,0,.08); }
.contact-left{ background: linear-gradient(135deg, #0d6efd, #0a58ca); color: white; padding: 50px 40px; height: 100%; }
.contact-right{ padding: 45px; background: white; }
.form-control{ border-radius: 12px; padding: 14px; }
.btn-send{ border-radius: 12px; padding: 14px; font-weight: 600; }
</style>
</head> <body>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-10">
<div class="card contact-card">
<div class="row g-0">
<div class="col-md-5">
<div class="contact-left">
<h2 class="mb-4"> <i class="bi bi-envelope-paper-fill"></i> Formulario de contacto </h2>
<p> Envía correos electrónicos desde localhost utilizando PHP, PHPMailer y Gmail SMTP. </p>
</div>
</div>
<div class="col-md-7">
<div class="contact-right">
<h3 class="fw-bold mb-4"> Enviar mensaje </h3>
<form method="POST">
<div class="mb-3">
<input type="text" name="customer_name" class="form-control" placeholder="Tu nombre" required >
</div>
<div class="mb-3">
<input type="email" name="customer_email" class="form-control" placeholder="correo@ejemplo.com" required >
</div>
<div class="mb-3">
<input type="text" name="subject" class="form-control" placeholder="Asunto" required >
</div>
<div class="mb-4">
<textarea name="message" rows="5" class="form-control" placeholder="Escribe tu mensaje..." required ></textarea>
</div>
<div class="d-grid">
<button type="submit" name="send" class="btn btn-primary btn-send" > <i class="bi bi-send-fill"></i> Enviar mensaje </button>
</div>
</form>
<?php
if(isset($_POST['send'])){
include 'sendemail.php';
$mail_username = "tucorreo@gmail.com"; $mail_userpassword = "abcdefghijklmnop"; $mail_addAddress = "info@tusitio.com";
$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 );
}
?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body> </html>
Explicación importante
Debes modificar las siguientes variables dentro del archivo index.php:
$mail_username
$mail_username = "tucorreo@gmail.com";
Debes colocar la dirección de correo electrónico Gmail desde donde se enviarán los correos.
$mail_userpassword
$mail_userpassword = "abcdefghijklmnop";
Aquí debes colocar la App Password generada desde tu cuenta de Google.
Importante: NO debes usar tu contraseña normal de Gmail.
$mail_addAddress
$mail_addAddress = "info@tusitio.com";
Esta variable corresponde al correo electrónico que recibirá los mensajes enviados desde el formulario de contacto.
4- Crear el archivo sendemail.php
Ahora crearemos el archivo encargado de realizar el envío del correo electrónico mediante PHPMailer.
<?phpuse PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
function sendemail( $mail_username, $mail_userpassword, $mail_setFromEmail, $mail_setFromName, $mail_addAddress, $txt_message, $mail_subject ){
$mail = new PHPMailer(true);
try {
// Configuración SMTP $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = $mail_username; $mail->Password = $mail_userpassword; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587;
// Remitente $mail->setFrom($mail_username, 'Sistema Web');
// Responder a $mail->addReplyTo($mail_setFromEmail, $mail_setFromName);
// Destinatario $mail->addAddress($mail_addAddress);
// Contenido $mail->isHTML(true);
$mail->Subject = $mail_subject;
$mail->Body = " <h2>Nuevo mensaje de contacto</h2>
<p><strong>Nombre:</strong> {$mail_setFromName}</p>
<p><strong>Correo:</strong> {$mail_setFromEmail}</p>
<p><strong>Mensaje:</strong></p>
<p>{$txt_message}</p> ";
$mail->send();
echo '<div class="alert alert-success mt-4"> Correo enviado correctamente. </div>';
} catch (Exception $e) {
echo '<div class="alert alert-danger mt-4"> Error al enviar el correo: '.$mail->ErrorInfo.' </div>';
}
} ?>
Errores comunes en 2026
Error 535 Authentication Failed
Este error ocurre cuando:
- Usas la contraseña normal de Gmail.
- No activaste la verificación en dos pasos.
- La App Password es incorrecta.
SMTP connect() failed
Puede ocurrir por:
- Firewall de Windows.
- Antivirus bloqueando conexiones SMTP.
- Puerto 587 bloqueado.
- Restricciones del hosting.
Recomendaciones modernas de seguridad
No es recomendable guardar credenciales directamente dentro del código.
Lo ideal es utilizar variables de entorno mediante un archivo .env.
Ejemplo:
MAIL_HOST=smtp.gmail.com MAIL_USERNAME=correo@gmail.com MAIL_PASSWORD=app_password MAIL_PORT=587
Alternativas modernas a Gmail SMTP
Aunque Gmail funciona perfectamente para pruebas locales, actualmente muchos desarrolladores utilizan servicios especializados como:
- Resend
- Mailgun
- SendGrid
- Amazon SES
- Brevo
Estos servicios ofrecen mejor entregabilidad, estadísticas y APIs modernas.
Conclusión
Como puedes ver, enviar correos electrónicos desde localhost con PHP en 2026 sigue siendo bastante sencillo utilizando PHPMailer y SMTP de Gmail.
La principal diferencia respecto a versiones anteriores es que ahora debemos utilizar Composer y contraseñas de aplicación para cumplir con las nuevas políticas de seguridad de Google.
Esperamos que este tutorial actualizado te sea de utilidad en tus proyectos PHP. Si tienes alguna duda o inconveniente con el código puedes dejar tu comentario y con gusto te ayudaremos.
Comentarios