No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de PHP: Integración con HTML

Curso de PHP: Integración con HTML

Carlos Eduardo Gómez García

Carlos Eduardo Gómez García

Implementando el servidor de correos de Gmail

23/24
Recursos

Aportes 7

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Hola!
A quienes no les llegue el mail a Gmail agreguen “use PHPMailer\PHPMailer\SMTP;” abajo de “use PHPMailer\PHPMailer\PHPMailer;” en su archivo mail.php 😃

Les dejo el repo para que lo consulten:
https://github.com/PHPMailer/PHPMailer

Algunos Comentarios

Algo que me generó confusión fue la forma en la que está implementada la lógica de envío de correos. Si se supone que es un formulario de contacto, el usuario espera que su mensaje llegue a la empresa, el equipo de contacto de la app, soporte, etc. Sin embargo, en la implementación lo que sucede es que el usuario recibe en su bandeja el mismo mensaje que envió a través del form.
Vemos esto cuando a Retax le llega el correo a su bandeja personal, es decir, la dirección que él ingresó cuando llenó el formulario.
Los correos se envían desde la dirección que indicamos en phpmailer->Username.
Me costó un rato entender esto y supongo que el objetivo de la clase es mostrar un ejemplo donde se utiliza PHPMailer, pero en este ejemplo me parece que los correos deberían ir en la dirección contraria.

Ejemplo Hipotético

  • El usuario es Mr. Michi y su correo es [email protected]
  • Nuestra app tiene una dirección de correo “intermediaria” llamada [email protected]. Esta es la direccion desde donde se envían los correos, por lo tanto es la que se configura con phpmailer->Username y phpmailer->Password. Esta dirección de correo lee la información del form, y la envía al correo del equipo de soporte de la app. Por eso llamo a esta cuenta “intermediaria”, pues su función es tomar el mensaje del usuario y pasarlo a soporte.
  • El equipo de soporte de nuestra app recibe el correo enviado desde [email protected] con la información que escribió del usuario: su nombre, correo, y el mensaje.
  • Por último, el equipo de soporte envía una respuesta al correo ingresado por el usuario, dando solución a su duda o pregunta.

Consideraciones importantes

  1. En el $body del email que enviaría la cuenta intermediaria contac-center debería incluir toda la información del usuario: nombre, correo y mensaje, pues supongo que si no se incluye el correo, no habrá forma de que el usuario reciba una respuesta, pues al equipo de soporte no le estaría llegando esta dirección de respuesta.
  2. La cuenta “intermediaria” podría incluso ser la misma de soporte, enviando un mensaje a sí mismo con la información del usuario. Recordemos que la cuenta “intermediaria” debe tomar la información del form y enviarla. (Hay un comentario más antiguo que menciona que le funcionó cuando ingresó la misma cuenta de destino, así que esta sería la explicación de por qué funcionó así).
  3. Este es sólo un ejemplo de implementación que se me vino a la mente, no tengo conocimiento técnico acerca del tema, no se si esta es la forma en la que se implementan en las empresas. Sólo estoy compartiendo la idea de lo que entendí del funcionamiento de esta herramienta. Por supuesto se aceptan comentarios de feedback y correcciones si hay algo en lo que puedo estar equivocado.

¡Ahora a seguir practicando y nunca para de aprender! 💚

¿Estas viendo este comentario?
Lo hemos logrado!!!
Muchas felicidades por haber logrado terminar el proyecto 😎
Hubo dificultades en el proceso pero nos llevamos un gran aprendizaje a lo largo de este maravilloso curso que nos compartió el buen Retax 😄
Me voy super contento con todo lo aprendido.
.
Les comparto mi repo donde podrán encontrar todo el código 😃

.
Me llego el correo de Gmail!!!

No estaba recibiendo el correo, pero al poner en el formulario el correo a donde voy a recibir mi correo ya me llego, es decir asi:

No me llegó el mail 😦 pongo todo y me sale el mensajito de Mensaje enviado pero no sale en mi bandeja 😕

Por si acaso no ponían pus su correo gmail hice lo siguiente XD

index.php

if(sendMail($subject, $body, $email, $name, true)) {
                $status = "succes";
            } else {
                $status = "danger";
            }

mail.php

function sendMail($subject, $body, $email, $name, $html = false) {
        try {
            # Configuración inicial de nuestro servidor de correos
            $correo = substr($email, strpos($email, '@') + 1);

            if($correo != "gmail.com") {
                return false;
            }

            $phpmailer = new PHPMailer();
            $phpmailer->isSMTP();
            
            # Intento de aceptar cualquier tipo de corre, pero se tienen que hacer cosas más complicadas bro :'c
            // if(substr($correo, strpos($correo, '.')) == '.edu.mx')
            //     $phpmailer->Host = 'smtp.gmail.com';
            // else
            //     $phpmailer->Host = 'smtp.' . $correo;

            $phpmailer->Host = 'smtp.gmail.com';    #Host del gmail
            $phpmailer->SMTPAuth = true;
            $phpmailer->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; #Habilitan la encriptación para que todos los datos viajen seguros
            $phpmailer->Port = 465; # Puerto que tiene seguiridad al enviar correos
            $phpmailer->Username = '[email protected]'; #Tu Gmail
            $phpmailer->Password = 'becbikrnrsrpytim';
    
            // Añadiendo destinatarios
            $phpmailer->setFrom('[email protected]', 'Mark Zuckerberg'); #Quien lo envía
            $phpmailer->addAddress($email, $name);  #Quien lo recibe
    
            // Definiendo el contenido de mi email
            $phpmailer->isHTML($html);              //Set email format to HTML
            $phpmailer->Subject = $subject;
            $phpmailer->Body    = $body;
    
            // Mandar el correo
            $phpmailer->send();
        } catch (Exception $ex) {
            return false;
        }
    }

Así si retorna falso pus le digo que pasó un error XD

Supongo que las credenciales usadas en el mail.php se deben “ocultar” mediante variables de entorno, como se hace en JS. Me imagino que vendrá más adelante en otros cursos.

Saludos.