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 michi@mail.com
Nuestra app tiene una dirección de correo "intermediaria" llamada contac-center@mail.com. 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 contac-center@mail.com 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
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.
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í).
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! 💚
Totalmente de acuerdo con tu comentario , estuve probando y pensando un rato sobre esto hasta que leí tu comentario seguiré investigando de como se implementa esta herramienta .
si entiendo, hice la prueba enviandolo a otro correo diferente, y en realidad el correo deberia llegar automaticamente a nuestro gmail configurado, y la casilla de nuestra pagina con el email del cliente deberia ser parte de informacion de contacto en nuestro formulario de pagina web diseñada, para asi nosotros como empresa o servicio tener esos datos de contacto y poder responder...
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 :)
Intenté agregar esa línea de código pero aún sigo sin recibir el mail :(
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:
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.
Muchas gracias, estaba buscando por todos lados como general el passkey
Si es posible realizarlo, aunque está un poco escondido de hecho.
¿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 :D
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!!!!
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:
//definiendo el contenido del email $phpmailer->isHTML($html); //Set email format to HTML $phpmailer->Subject = $subject; $phpmailer->Body = $body;
$phpmailer->send();}
?>
Hola, a alguien mas le aparece este error al momento de enviar el formulario?
Fatal error: Uncaught Error: Cannot unpack array with string keys in C:\xampp\htdocs\formulario\index.php:13 Stack trace: #0 {main} thrown in C:\xampp\htdocs\formulario\index.php on line 13
Es por la versión de PHP, creo que el profe tiene la ultima versión, yo tengo la version 7.4.22 y me sale igual, pero solo puse todos los campos para validar y me funciona igual todo.
Gracias, realmente si era la versión
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 llega el mail al gmail, tengo el codigo igual que el profe. Alguna idea?
Hola Joaquin 😊.
¿podrías compartirnos un print de pantalla?
¿Alguna sugerencia para enviar mensajes con acentos, eñes o caracteres especiales?
$phpmailer->CharSet=PHPMailer::CHARSET_UTF8;
seguí los pasos pero el correo no me llegó. :(
cula será mi pecado?
$mail->isHTML(true);$mail->Subject='Asunto del Correo';$mail->Body='Contenido del correo en HTML';
Enviar el correo:
if($mail->send()){echo'Correo enviado!';}else{echo'Error al enviar: '.$mail->ErrorInfo;}
Esta configuración básica te permitirá enviar correos electrónicos usando PHPMailer. Asegúrate de ajustar los parámetros según tu servidor y credenciales.
¿Alguien tiene idea de que debería cambiar para que funcione con un correo de Microsoft?
Si yo hago uso de un hosting, ya no tengo la necesidad de ingresar a la configuración de gmail para conseguir la contraseña y colocarla $phpmailer->Password?
El código o más bien la contraseña qué se le género al profe del correo, cual es su función? y con eso alguien puede entrar a ese correo ?
o solo es para resivir correo ?
Hola a todos!!! Parece ser la pregunta sin respuesta... Como a todos aquí, a mi tampoco me llegan los email... Probé cambiar mil cosas y aún así no llegan...
Alguien que haya podido resolver el problema!!!
x2
Hola tengo un problema, el correo no aparece en mi bandeja de entrada. Revisé el código y me parece que todo está bien, ¿alguien sabe porque no me caen los emails que envío? (Adjunto el código en dónde eliminé la contraseña generada solo para que no se vea)
Agradecería mucho la ayuda 💚
.
index.php
<?php
require 'mail.php';// Validating that the data sent is not emptyfunctionvalidate($name, $email, $subject, $message, $form){return!empty($name)&&!empty($email)&&!empty($subject)&&!empty($message);};$status ="";// Validating if the form was sent, using the name of the buttonif(isset($_POST["form"])){// Array unpackingif(validate(...$_POST)){// Saving everything in variables $name = $_POST["name"]; $email = $_POST["email"]; $subject = $_POST["subject"]; $message = $_POST["message"];// Creating the body of the email $body = "$name <$email> sends you the following message:<br><br> $message";// Sending the emailsendEmail($subject, $body, $email, $name, $subject,true); $status ="success";}else{ $status ="danger";}};?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="CSS/style.css"><title>Contact</title></head><body><?php if($status=="danger"):?><div class="alert danger"><span>There was an error 😓</span></div><?php endif;?><?php if($status=="success"):?><div class="alert success"><span>¡Message sent succesfully 🥳!</span></div><?php endif;?><form action="./" method="POST"><h2>¡Contact me!</h2><div class="input-group"><label for="name">Name:</label><input type="text" name="name" id="name"></div><div class="input-group"><label for="email">E-mail:</label><input type="email" name="email" id="email"></div><div class="input-group"><label for="subject">Subject:</label><input type="subject" name="subject" id="subject"></div><div class="input-group"><label for="message">Message:</label><textarea name="message" id="message"></textarea></div><div class="button-container"><button name="form" type="submit">Send</button></div><div class="contact-info"><div class="info"><span><i class="fas fa-map-marker-alt"></i>ElSalvador,SanSalvador</span></div><div class="info"><span>danielsaytcode@gmail.com</span></div></div></form><script src="https://kit.fontawesome.com/bbff992efd.js" crossorigin="anonymous"></script></body></html>
.
mail.php
<?php
require("vendor/autoload.php");use PHPMailer\PHPMailer\PHPMailer;functionsendEmail($subject, $body, $email, $name, $html =false){// Initial configuration of the mail server $phpmailer =newPHPMailer(); $phpmailer->isSMTP(); $phpmailer->SMTPAuth=true; $phpmailer->Host='smtp.gmail.com'; $phpmailer->SMTPSecure=PHPMailer::ENCRYPTION_SMTPS; $phpmailer->Port=465;// Setting a secure port $phpmailer->Username='danielsaytcode@gmail.com'; $phpmailer->Password='contraseñaxd';// Recipients $phpmailer->setFrom('contact@miempresa.com','Mi empresa');// The one who sends the mail $phpmailer->addAddress($email, $name);//Add a recipient// Defining the content of the email $phpmailer->isHTML($html);//Set email format to HTML $phpmailer->Subject= $subject; $phpmailer->Body= $body; # $phpmailer->AltBody='This is the body in plain text for non-HTML mail clients';// Sending the email 📧 $phpmailer->send();}?>
Intenté agregar la linea de código de use PHPMailer\PHPMailer\SMTP;
Pero aún sigo sin poder recibir los correos :(
Lograste enviar los correos?
Si no, me avisas y te hecho una mano.
Alguien mas le arroja este error?
Extension missing: openssl
Estuve investigando y en php.ini se deberia descomentar la linea donde esta
extension=openssl
pero cuando revise, ya estaba descomentada, y todas las soluciones que encuentro son la misma
No se me conecta desde la clase pasada:
Te la pelaste. Error: SMTP Error: Could not connect to SMTP host. Failed to connect to serverSMTP server error: Failed to connect to server SMTP code: 13 Additional SMTP info: Permission denied