Hace unos años cuando levanté por primera vez un VPS desde cero configurándolo para hospedar más de un nombre de dominio, me encontré con el problema que los formularios de contacto de dichos sitios web no funcionaban, cuando un usuario daba clic en el botón enviar parecía que se mandaba el mensaje desde el frontend pero desde el backend nada pasaba. Después de un par de días de investigar caí en la cuenta que requería instalar y configurar una dependencia adicional al VPS. Deja que te muestre cómo lograr enviar correos desde formulario de contacto en un VPS o servidor dedicado.
Requisitos previos.
- Acceso SSH al VPS
- Contar con usuario sudo
1. Instalamos composer
Accedemos a nuestro VPS a través de SSH y buscamos actualizaciones:
sudo apt update
Si hay actualizaciones para instalar:
sudo apt upgrade
Instalamos unzip:
sudo apt install unzip
Nos dirigimos a la página oficial de Composer aquí, vamos a la sección command-line installation y copiamos todas las líneas de comandos en nuestra terminal:
Al copiar las líneas de comando se nos abrirá dos ventanas de advertencia las aceptamos:
Damos Enter a la última línea que tenemos en la terminal:
Escribimos:
sudo mv composer.phar /usr/bin/composer
Ahora escribimos composer y presionamos ‘y’ se desplegará una lista de comandos y argumentos que le podemos pasar a composer, con esto comprobamos que tenemos instalado globalmente composer:
2. Instalamos PHPMailer
Instalamos PHPMailer:
composer require phpmailer/phpmailer
3. Creamos el formulario de contacto
Para este tutorial solo pondré el código del formulario de contacto estoy usando una plantilla gratuita de Colorlib y la puedes descargar completa aquí:
<form class="contact2-form validate-form" method="POST" action="enviar.php"> <span class="contact2-form-title"> Contact Us </span> <div class="wrap-input2 validate-input" data-validate="Name is required"> <input class="input2" type="text" name="name"> <span class="focus-input2" data-placeholder="NAME"></span> </div> <div class="wrap-input2 validate-input" data-validate = "Valid email is required: [email protected]"> <input class="input2" type="text" name="email"> <span class="focus-input2" data-placeholder="EMAIL"></span> </div> <div class="wrap-input2 validate-input" data-validate="Subject is required"> <input class="input2" type="text" name="subject"> <span class="focus-input2" data-placeholder="Subject"></span> </div> <div class="wrap-input2 validate-input" data-validate = "Message is required"> <textarea class="input2" name="message"></textarea> <span class="focus-input2" data-placeholder="MESSAGE"></span> </div> <div class="container-contact2-form-btn"> <div class="wrap-contact2-form-btn"> <div class="contact2-form-bgbtn"></div> <button type="submit" class="contact2-form-btn"> Send Your Message </button> </div> </div> </form>
4. Creamos archivo de configuración para envío de email
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // Cargar el cargador automático del compositor require '/vendor/autoload.php'; $mail = new PHPMailer(true); if(isset($_POST['email'])){ // se introduce la direccion de correo electronico que se va a mandar la informacion del formulario y asunto $email_to = "[email protected]"; $email_subject = "From Diario del Programador WebSite"; // Aquí se deberían validar los datos ingresados por el usuario if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['subject']) || !isset($_POST['message'])) { header("Location: index.html"); die(); } $email_message = "Detalles del formulario de contacto:</br> \n\n"; $email_message .= "Nombre: " . $_POST['name'] . "</br>" . "\n"; $email_message .= "E-mail: " . $_POST['email'] . "</br>" . "\n"; $email_message .= "Asunto: " . $_POST['subject'] . "</br>" . "\n"; $email_message .= "Mensaje: " . $_POST['message'] . "</br>" . "\n\n"; // Configuraciones del servidor $mail->SMTPDebug = 2; // Habilitar salida de depuración detallada $mail->isSMTP(); // Configurar el remitente para usar SMTP $mail->Host = 'smtp.tuproveedor.mx'; // Especificar servidores SMTP principales y de respaldo $mail->SMTPAuth = true; // Habilitar autenticación SMTP $mail->Username = '[email protected]'; // Nombre de usuario SMTP $mail->Password = 'tupassword'; // Contraseña SMTP $mail->SMTPSecure = 'tsl'; // Habilitar enciptación SSL, TLS también aceptado con el puerto 587 $mail->Port = 587; // Puerto TCP para conectarse //Destinatarios $mail->setFrom('[email protected]', 'Mail Delivery System'); $mail->addAddress($email_to, 'WebMaster'); // Agregar un destinatario //Contenido $mail->isHTML(true); // Establecer formato de correo electrónico a HTML $mail->Subject = $email_subject; $mail->Body = $email_message; $mail->send(); header("Location: index.html"); } ?>
Al hacer la prueba de envío de correo desde el formulario de contacto ya debe de mandarse sin problema el correo a la dirección que escogiste. Hemos aprendido cómo lograr enviar correos desde formulario de contacto en un VPS o servidor dedicado usando la librería de PHPMailer. Si este tutorial te ayudo en algo, te invito a que lo compartas en tus redes sociales para poder ayudar a más personas. Espero tus dudas y comentarios.