No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

18 Días
18 Hrs
9 Min
13 Seg

Implementando el servidor de correos de Gmail

23/24
Recursos

Aportes 18

Preguntas 12

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 “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! 💚

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

¿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 😕

Buenas tardes, el código funciona bien, pero está trocando la información, los datos que registra el usuario se vuelven los del destinatario y los que corresponden al sitio web como remitente. ¿Cómo corrijo esto? ````txt $phpmailer->setFrom('[email protected]', 'destinatario'); $phpmailer->addAddress($email,$name); ```js $phpmailer->setFrom('[email protected]', 'destinatario'); $phpmailer->addAddress($email,$name); //Datos del remitente o usuario ```` $phpmailer->setFrom('[<[email protected]>](mailto:[email protected])', 'destinatario'); $phpmailer->addAddress($email,$name); ```js $phpmailer->setFrom('<[email protected]>', 'destinatario'); $phpmailer->addAddress($email,$name); //Datos del remitente o usuario
¿Cómo puedo hacer un deploy de este formulario?, trate de hacerlo en Git Hub pero no acepta PHP.
$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 “ocultar” mediante variables de entorno, como se hace en JS. Me imagino que vendrá más adelante en otros cursos.

Saludos.