PHP - Saber que un correo se ha recibido con phpMailer

 
Vista:

Saber que un correo se ha recibido con phpMailer

Publicado por carlosVallSego (12 intervenciones) el 02/12/2022 11:26:13
Hola a todos tengo una página que cuando un usuario se registra recibe un correo de bienvenida con phpMailer.
Todo funciona correctamente pero me he dado cuenta que si me invento la dirección de correo también se envía y no me avisa que esa cuenta correo no existe. Estoy usando una cuenta de GMAIL para mandar los correos, y en esa cuenta si me llega un correo de GMAIL como que ese email no existe o no se pudo entregar.
¿Se puede hacer que phpMailer detecte que el correo no existe?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Saber que un correo se ha recibido con phpMailer

Publicado por Kathyu (905 intervenciones) el 02/12/2022 18:23:00
PHPmailer no va a verificar si el correo existe o no. PHPmailer solo manda el mail, a parte es bastante complicado verificar si el correo [email protected] existe de verdad puesto que tendrías que validar dominios y todo eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Saber que un correo se ha recibido con phpMailer

Publicado por Jefferson (203 intervenciones) el 03/12/2022 00:48:14
Hola como dice Kathyu

Es un proceso laborioso ...

Ahora bien, si solo son pocos los correos a verificar puedes hacerlo con esta API (gratuita 100 al mes)

https://apilayer.com/marketplace/email_verification-api?_gl=1*td662l*_ga*NTIwOTg3NzE1LjE2NzAwMTM2NTM.*_ga_HGV43FGGVM*MTY3MDAyMzk2Ni4zLjEuMTY3MDAyNDA1OC42MC4wLjA.#pricing

Te dejare un ejemplo de como verificar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!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 href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css">
    <title>Mail Verification</title>
</head>
 
<body>
    <section class="container mt-3">
 
        <div class="row justify-content-between">
            <div class="col-6">
                <div class="form-floating mb-3">
                    <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
                    <label for="floatingInput">Ingrese Email</label>
                </div>
            </div>
            <div class="col-4">
                <button class="btn btn-primary">Valida</button>
            </div>
        </div>
 
        <ol class="list-group list-group-numbered mt-3">
 
        </ol>
 
    </section>
 
 
</body>
<script>
/* Ingresa a
https://apilayer.com/marketplace/email_verification-api?_gl=1*td662l*_ga*NTIwOTg3NzE1LjE2NzAwMTM2NTM.*_ga_HGV43FGGVM*MTY3MDAyMzk2Ni4zLjEuMTY3MDAyNDA1OC42MC4wLjA.#pricing
Te logueas y seleccionas el plan libre, te daran un Key
*/
 
const llave = 'COLOCA AQUI EL KEY';
 
document.querySelector('.btn').addEventListener('click', function(e) {
    if (document.querySelector('.btn').innerHTML == 'Valida') {
        document.querySelector('.btn').innerHTML = '<div class="spinner-border" role="status"></div>';
        document.querySelector('.btn').disabled = true;
        var myHeaders = new Headers();
        myHeaders.append("apikey", llave);
 
        let ol = '';
        var requestOptions = {
            method: 'GET',
            redirect: 'follow',
            headers: myHeaders
        };
 
        fetch("https://api.apilayer.com/email_verification/check?email=" + floatingInput.value,
                requestOptions)
            .then(response => response.json())
            .then((res) => {
                Object.entries(res).forEach(([key, value]) => {
                    ol += li(key, value)
                });
                document.querySelector('.col-6').classList.add('d-none');
                document.querySelector('.list-group').innerHTML = ol;
                document.querySelector('.btn').innerHTML = 'Hagamos otro';
                document.querySelector('.btn').disabled = false;
            })
            .catch(error => console.log('error', error));
    } else {
        document.querySelector('.list-group').innerHTML = '';
        document.querySelector('.btn').innerHTML = 'Valida';
        document.querySelector('.col-6').classList.remove('d-none');
    }
 
});
 
const li = (key, value) => {
    let dataArray = [{
            "email": "Buscamos el email"
        },
        {
            "did_you_mean": "Quisiste decir"
        },
        {
            "user": "Usuario"
        },
        {
            "domain": "Dominio"
        },
        {
            "format_valid": "Formato valido"
        },
        {
            "mx_found": "Registro Mail Exchanger"
        },
        {
            "smtp_check": "Test del SMTP (EXISTE LA DIRECCION)"
        },
        {
            "catch_all": "Posee comodin de reenvio"
        },
        {
            "role": "Cuenta de empresa"
        },
        {
            "disposable": "Cuenta email desechable"
        },
        {
            "free": "Cuenta correo gratuita"
        },
        {
            "score": "Puntuacion"
        }
    ]
    let res = dataArray.filter(obj => key in obj);
    let check = '<i class="bi bi-check-circle text-success fs-4"></i>';
    let fail = '<i class="bi bi-x-circle-fill text-danger fs-4"></i>';
    let badge = value == 1 ? check : (value == 0 ? fail : check);
    let cont = value == 1 ? 'SI' : (value == '' ? 'NO' : value);
    return `
    <li class="list-group-item d-flex justify-content-between align-items-start">
        <div class="ms-2 me-auto">
              <div class="fw-bold">` + res[0][key] + `</div>
                 ` + cont + `
         </div>
       <span class="badge bg-light rounded-pill">` + badge + `</span>
    </li>
    `;
}
</script>
 
</html>

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Saber que un correo se ha recibido con phpMailer

Publicado por Kathyu (905 intervenciones) el 03/12/2022 12:13:25
Pero no es lo mas practico ni lo mas optimo. Lo mejor es que no se registre al usuario mientras no se compruebe que es una persona real y que su email es válido. Es lo que hacen hoy en día casi todos los sistemas, te mandan una url al mail que al dar clic ya te registra o "inserta" en la DB como un usuario real y autenticado.

Existen formas mas complicadas y pro de hacerlo pero creo que para este fin bastaría.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Saber que un correo se ha recibido con phpMailer

Publicado por carlosVallSego (12 intervenciones) el 06/12/2022 11:33:14
Gracias por responder, yo no he podido hacerlo antes por motivo de trabajo. Creo que lo he entendido, a ver por eso muchos foros cuando te registras te mandan un enlace a tu correo para que lo valides. Lo que voy a hacer es crear una tabla con el id del usuario y un campo que ponga 'validado' por ejemplo y mandare en el correo un enlace con una petición a esa tabla para que se ponga por ejemplo a ' true '. Cuando el usuario quiera ' ingresar ' en la página además de comprobar usuario y contraseña comprobare ese campo también.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Saber que un correo se ha recibido con phpMailer

Publicado por Kathyu (905 intervenciones) el 11/12/2022 10:26:23
Es una buena opción. Yo no soy de guardar valores bool en la DB, prefiero números, son mas rápidos y hacen menos pesada la DB.

1
2
1 = Válido
0 = No Válido

Así me evito también de estar comparando string o bool en las querys
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Saber que un correo se ha recibido con phpMailer

Publicado por gatoher (12 intervenciones) el 12/12/2022 09:36:07
Hola Kathyu, lo he hecho como te he comentado. He creado un campo en la tabla donde se guarda el password y nick de usuario. Le mando un email con este encriptado, cuando lo recibo lo desencripto lo busca en la tabla y le pongo a '1' ese campo. Pero lo que ocurre de esta forma es que hay que hacer 3 comprobaciones cada vez que el usuario se loguea. Hay que comprobar nick,password y este campo.

Estaba pensando en crear una tabla espejo de esta tabla, cuando el usuario mandara el email hacer la inserción en la tabla original. De esta manera ya no habría que comprobar este campo nunca más. Después solo habría que borrar de la tabla espejo ese usuario. Es más trabajo por el tema de las comprobaciones de si existe el usuario etc, etc... Además tengo 3 tablas relacionadas con el id del usuario que se rellenan cuando el usuario se registra, el password y email, los datos de su residencia y una última con los datos personales. Tendría que hacer una tabla espejo de cada una, aunque es más trabajo a la larga supongo que sera mejor.

Bueno lo voy a estudiar.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Saber que un correo se ha recibido con phpMailer

Publicado por Kathyu (905 intervenciones) el 12/12/2022 15:03:19
No comprendo muy bien eso de las tablas espejo que quiere hacer. Pero vamos que esto es algo que usted mismo ya lo ha experimentado en mas de algún registro de alguna web por ahí.

Considere un campo validated y un token (hash) único para cada usuario. Luego genera una url donde vaya ese token y se la manda al usuario.

Pongamos un ejemplo básico: https://dominio.com/validator.php?token=%&4dfg4g4d58g5d4dgd58gdg4d

Cuando "alguien" (usuario registrado) de clic a esa url se captura el token y se busca el usuario que tiene ese token y se le coloca 1 o true o lo que quiera en su campo validated. Ahora, por seguridad puede después de validar al usuario borrar ese token de la tabla, así cuando el mismo usuario u otro visiten la url antes mencionada les dirá que el token no existe y no permitirá hacer nada mas.

Puede hacerlo así o mas complejo aun, puede buscar ejemplos en la web o incluso ver como validan algunos Frameworks o webs.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Saber que un correo se ha recibido con phpMailer

Publicado por Kathyu (905 intervenciones) el 13/12/2022 13:18:56
Pero con sus tablas espejo o como??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Saber que un correo se ha recibido con phpMailer

Publicado por carlosvallsego (12 intervenciones) el 14/12/2022 11:16:38
No Kathyu lo he hecho a través de un enlace. Mandando el email encriptado y comparándolo con la tabla donde se almacenan. Después ponía en un campo bolean un '1'. Este proyecto es pequeño.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar