Me he encontrado con este código PHP para verificar la dirección de correo electrónico usando SMTP sin enviar un correo electrónico .
¿Alguien ha intentado algo similar o funciona para usted? ¿Puede saber si un correo electrónico que ingresa el cliente / usuario es correcto y existe?
Respuestas:
Hay dos métodos que a veces puedes usar para determinar si realmente existe un destinatario:
Puede conectarse al servidor y emitir un
VRFY
comando. Muy pocos servidores admiten este comando, pero está destinado exactamente para esto. Si el servidor responde con un 2.0.0 DSN, el usuario existe.Puede emitir un
RCPT
, y ver si el correo es rechazado.Si el usuario no existe, obtendrá un DSN 5.1.1. Sin embargo, el hecho de que el correo electrónico no sea rechazado no significa que el usuario exista. Algunos servidores descartarán silenciosamente solicitudes como esta para evitar la enumeración de sus usuarios. Otros servidores no pueden verificar al usuario y tienen que aceptar el mensaje independientemente.
También hay una técnica antispam llamada lista gris, que hará que el servidor rechace la dirección inicialmente, esperando que un servidor SMTP real intente una nueva entrega algún tiempo después. Esto arruinará los intentos de validar la dirección.
Honestamente, si está intentando validar una dirección, el mejor enfoque es usar una expresión regular simple para bloquear direcciones obviamente inválidas, y luego enviar un correo electrónico real con un enlace a su sistema que validará la recepción del correo electrónico. Esto también asegura que el usuario ingresó su correo electrónico real, no un pequeño error tipográfico que le pertenece a otra persona.
fuente
Otras respuestas aquí discuten los diversos problemas al tratar de hacer esto. Pensé en mostrarte cómo podrías intentar esto en caso de que quisieras aprender haciéndolo tú mismo.
Puede conectarse a un servidor de correo a través de telnet para preguntar si existe una dirección de correo electrónico. Aquí hay un ejemplo de prueba de una dirección de correo electrónico para
stackoverflow.com
:Las líneas con prefijos de códigos numéricos son respuestas del servidor SMTP. Agregué algunas líneas en blanco para que sea más legible.
Muchos servidores de correo no devolverán esta información como un medio para evitar que los spammers recopilen direcciones de correo electrónico, por lo que no puede confiar en esta técnica. Sin embargo, puede tener cierto éxito en la limpieza de algunas direcciones de correo electrónico evidentemente malas al detectar servidores de correo no válidos o al rechazar las direcciones de los destinatarios como se indicó anteriormente.
Tenga en cuenta también que los servidores de correo pueden ponerlo en la lista negra si les hace demasiadas solicitudes.
En PHP, creo que puede usar
fsockopen
,fwrite
yfread
para realizar los pasos anteriores mediante programación:fuente
La respuesta general es que puede no comprobar si una dirección de correo electrónico existe evento si se envía un correo electrónico a la misma: sólo podía entrar en un agujero negro.
Dicho esto, el método descrito allí es bastante efectivo. Se usa en el código de producción en ZoneCheck, excepto que usa RSET en lugar de QUIT.
Cuando la interacción del usuario con su buzón no es demasiado costosa, muchos sitios realmente prueban que el correo llega a algún lugar enviando un número secreto que debe enviarse de vuelta al emisor (ya sea yendo a una URL secreta o enviando este número secreto por correo electrónico). La mayoría de las listas de correo funcionan así.
fuente
En realidad no ..... Es posible que algunos servidores no comprueben "rcpt to:"
http://www.freesoft.org/CIE/RFC/1123/92.htm
Hacerlo es un riesgo de seguridad .....
Si el servidor lo hace, puede escribir un bot para descubrir cada dirección en el servidor ...
fuente
Esto fallará (entre otros casos) cuando el servidor de correo objetivo utilice listas grises.
Lista gris : el servidor SMTP rechaza la entrega la primera vez que se conecta un cliente previamente desconocido, permite la (s) próxima (s) vez (s); esto mantiene fuera un porcentaje de los robots de spam, al tiempo que permite un uso legítimo, ya que se espera que un remitente legítimo vuelva a intentarlo , que es lo que harán los agentes normales de transferencia de correo.
Sin embargo, si su código solo verifica en el servidor una vez , un servidor con listas grises negará la entrega (ya que su cliente se conecta por primera vez); a menos que vuelva a verificar dentro de un tiempo, es posible que esté rechazando incorrectamente direcciones de correo electrónico válidas.
fuente
Algunos asuntos:
Para algunos servidores SMTP (como gmail), debe usar SSL para hacer cualquier cosa.Esto solo es cierto cuando se utiliza el servidor SMTP de gmail para enviar correos electrónicos.fuente
Aunque esta pregunta es un poco antigua, esta sugerencia de servicio podría ayudar a los usuarios a buscar una solución similar que verifique las direcciones de correo electrónico más allá de la validación de sintaxis antes del envío.
He estado utilizando este servicio de código abierto para una validación más profunda de los correos electrónicos (comprobación de registros mx en el dominio de la dirección de correo electrónico, etc.) para algunos proyectos con buenos resultados. También comprueba los errores tipográficos comunes que la bruja es bastante útil. Demostración aquí .
fuente
"¿Puedes decir si un correo electrónico que ingresa el cliente / usuario es correcto y existe?"
En realidad, estas son dos cosas separadas. Puede existir pero puede no ser correcto.
A veces tiene que tomar las entradas del usuario al valor nominal. De lo contrario, hay muchas maneras de derrotar al sistema.
fuente
Todo lo que puede hacer es buscar DNS y asegurarse de que el dominio que está en la dirección de correo electrónico tenga un registro MX, aparte de eso no hay una forma confiable de lidiar con esto.
Algunos servidores pueden funcionar con el método rcpt-to donde se habla con el servidor SMTP, pero depende completamente de la configuración del servidor. Otro problema puede ser que un servidor sobrecargado puede devolver un código 550 que dice que el usuario es desconocido, pero este es un error temporal, hay un error permanente (¿creo que 451?) Que puede devolverse. Esto depende completamente de la configuración del servidor.
Yo personalmente verificaría el registro MX de DNS y luego enviaría un correo electrónico de verificación si existe el registro MX.
fuente
fuente
getmxrr
Suponiendo que es la dirección del usuario , algunos servidores de correo permiten que el comando SMTP VRFY realmente verifique la dirección de correo electrónico en sus buzones. La mayor parte del sitio principal no le dará mucha información; la respuesta de gmail es "si intentas enviarlo por correo, intentaremos enviarlo" o algo así como inteligente.
fuente
Creo que no puedes, hay tantos escenarios en los que incluso el envío de un correo electrónico puede fallar. P.ej. el servidor de correo del lado del usuario está temporalmente inactivo, el buzón existe pero está lleno, por lo que el mensaje no se puede entregar, etc.
Esa es probablemente la razón por la que tantos sitios validan un registro después de que el usuario confirmó que ha recibido el correo electrónico de confirmación.
fuente
Puedo confirmar las respuestas de Joseph y Drew para usar
RCTP TO: <address_to_check>
. Me gustaría agregar algunas pequeñas adiciones sobre esas respuestas.Proveedores generales
Algunos proveedores de correo implementan una política general, lo que significa que
*@mydomain.com
devolverá positivo alRCTP TO:
comando. Pero esto no significa necesariamente que el buzón "exista", como en "pertenece a un humano". Aquí no se puede hacer mucho, solo ten en cuenta.IP Greylisting / Blacklisting
Lista gris: la primera conexión de IP desconocida está bloqueada. Solución: vuelva a intentarlo al menos 2 veces.
Lista negra: si envía demasiadas solicitudes desde la misma IP, esta IP se bloquea. Solución: utilice la rotación de IP; Reacher usa Tor.
Solicitudes HTTP en formularios de registro
Esto es muy específico del proveedor, pero a veces puede usar solicitudes HTTP bien diseñadas y analizar las respuestas de estas solicitudes para ver si un nombre de usuario ya está registrado o no con este proveedor.
Aquí está la función relevante de una biblioteca de código abierto que escribí para verificar
*@yahoo.com
direcciones usando solicitudes HTTP: check-if-email-exist . Sé que mi código es Rust y este hilo está etiquetado como PHP, pero se aplican las mismas ideas.Bandeja de entrada completa
Este podría ser un caso extremo, pero cuando el usuario tiene una bandeja de entrada llena,
RCTP TO:
devolverá un5.1.1 DSN
mensaje de error que dice que está lleno. ¡Esto significa que la cuenta realmente existe!Divulgar
Corro Reacher , una API de verificación de correo electrónico en tiempo real. Mi código está escrito en Rust y es 100% de código abierto. Compruébalo si quieres una solución más robusta:
Github: https://github.com/amaurymartiny/check-if-email-exists
Con una combinación de varias técnicas para saltar a través de los aros, logro verificar alrededor del 80% de los correos electrónicos que revisan mis clientes.
fuente
fuente