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 16

Preguntas 11

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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 鈥渋ntermediaria鈥 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 鈥渋ntermediaria鈥, 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 鈥渋ntermediaria鈥 podr铆a incluso ser la misma de soporte, enviando un mensaje a s铆 mismo con la informaci贸n del usuario. Recordemos que la cuenta 鈥渋ntermediaria鈥 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! 馃挌

Hola!
A quienes no les llegue el mail a Gmail agreguen 鈥渦se PHPMailer\PHPMailer\SMTP;鈥 abajo de 鈥渦se PHPMailer\PHPMailer\PHPMailer;鈥 en su archivo mail.php 馃槂

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

驴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!!!

Para que no te quiebres la cabeza... Conforme lo dice expresamente la documentaci贸n de Gmail, este m茅todo ya no es v谩lido para abril 2024. "Para proteger mejor tu cuenta, Gmail ya no admite aplicaciones ni dispositivos de terceros que requieran que compartas tu nombre de usuario y tu contrase帽a de Google. Si compartes las credenciales de tu cuenta con terceros, los hackers podr谩n acceder a ella m谩s f谩cilmente." Referencia: <https://support.google.com/mail/answer/7126229?visit_id=638495410088696499-1233383435&hl=es&rd=1> Mi recomendaci贸n, si ves este video, es s贸lo para tener una idea de c贸mo se hac铆a en el pasado por si alg煤n cliente desfasado recurre a ti por un problema con sus formularios ya sabes por donde puede ir. Por lo dem谩s, intenta buscar otro modo o sigue los cursos para ver formas m谩s actualizadas.
La verdad estuve horas verificando porque no me funcionaban correos reales y lo mas razonable es creer que el metodo explicado en el video ya no es posible en la actualidad (10/2023), pero aporto con una correccion a la logica para que el formulario de contacto llegue a "la empresa" en lugar de al propio usuario que no es muy logico que haga eso: \isSMTP();聽 聽 $phpmailer->Host = 'smtp.mailtrap.io';聽 聽 $phpmailer->SMTPAuth = true;聽 聽 $phpmailer->Port = 2525;聽 聽 $phpmailer->Username = 'correoservidor';聽 聽 $phpmailer->Password = 'contrase帽aservidor'; 聽 聽 *//a帽adiendo destinatarios*聽 聽 $phpmailer->setFrom($email , $name);聽 聽 $phpmailer->addAddress('[email protected]', 'Formulario Contacto'); 聽 聽 *//definiendo el contenido del email*聽 聽 $phpmailer->isHTML($html); 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽*//Set email format to HTML*聽 聽 $phpmailer->Subject = $subject;聽 聽 $phpmailer->Body 聽 聽= $body; 聽 聽 $phpmailer->send();} ?>

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 馃槙

$phpmailer->Username : es el correo que hace en envi贸 de la informaci贸n del formulario. $phpmailer->setFrom : Permite poner un nombre y correo visible de quien env铆a la informaci贸n (puede ser el mismo correo de user name u otro correo).聽 $phpmailer->addAddress : Permita poner a quien le debe llegar la informaci贸n聽que el formulario recogi贸.
$phpmailer->Username : es el correo que hace en envi贸 de la informaci贸n del formulario.$phpmailer->setFrom : Permite poner un nombre y correo visible de quien env铆a la informaci贸n (puede ser el mismo correo de user name u otro correo).聽$phpmailer->addAddress : Permita poner a quien le debe llegar la informaci贸n聽que el formulario recogi贸.
a mi me dio un problema ERRO 500 HTTP, al colocar la funcion con google.
Es importante que en $phpmailer->Username = pongan su correo, si no, no les llega el e-mail
VSCode me muestra el siguiente error, creo que por una extensi贸n que tengo instalada. Pero a煤n as铆, me intriga porque en el curso se ve claramente que tambi茅n aparece en rojo. `Undefined type 'PHPMailer\PHPMailer\PHPMailer'`

Revisando con lupa el c贸digo, despu茅s de 3 horas lo logr茅 :鈥)

Hola!
Al igual que a muchos no me llega el email a menos que ponga mi correo en el formulario, es decir todos los usuarios deber谩n poner mi correo para que me llegue. en fin鈥 prob茅 lo que dijeron los compa帽eros pero no me funcion贸.

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 鈥渙cultar鈥 mediante variables de entorno, como se hace en JS. Me imagino que vendr谩 m谩s adelante en otros cursos.

Saludos.