Lograr enviar correos desde formulario de contacto VPS
Photo by Rajesh Sundaram from FreeImages

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

Lograr enviar correos desde formulario de contacto en un VPS

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>

Lograr enviar correos desde formulario de contacto en un VPS

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.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.