Escenario:
Tengo un formulario de contacto en mi aplicación web, recibe una gran cantidad de correo no deseado.
Estoy validando el formato de las direcciones de correo electrónico, es decir, ^[email protected]+\..+$
Estoy usando un servicio de filtrado de correo no deseado (defensio) pero los puntajes de spam devueltos se superponen con los mensajes válidos. En un umbral de 0.4, algunos mensajes no deseados se transmiten y algunas preguntas de los clientes se arrojan erróneamente en un registro y se muestra un error.Uso de registros MX para validar direcciones de correo electrónico
Todos los mensajes no deseados utilizan direcciones de correo electrónico falsas, p. [email protected]
Servidor PHP5 Linux dedicado en EE. UU., mysql, registrando correo no deseado solamente, enviando por correo electrónico los mensajes no spam (no almacenados).
Propuesta: de checkdnsrr(preg_replace(/^[email protected]/, '', $_POST['email']), 'MX')
usar PHP para comprobar el dominio de correo electrónico se resuelve en una dirección válida, registro en un archivo, a continuación, redirigir con un error para los mensajes que no se resuelven, continúe con el servicio de filtro de correo no deseado como antes para las direcciones que se resuelven de acuerdo con checkdnsrr()
.
He leído (y soy escéptico al respecto) que nunca se debe dejar este tipo de validación en búsquedas remotas, pero ¿por qué?
Aparte de los problemas de conectividad, donde de todos modos tendré problemas más grandes que un formulario de contacto, ¿va a encontrar checkdnsrr falsos positivos/negativos?
¿Habría algunos tipos de direcciones que no se resolverían? direcciones gubernamentales? direcciones de correo electrónico ip?
¿Necesito escapar del nombre de host que paso a checkdnsrr()?
Solución: Una combinación de las tres respuestas (desearía poder aceptar más de una como respuesta compuesta).
estoy usando:
$email_domain = preg_replace('/^[email protected]/', '', $email).'.';
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){
//validation error
}
todo el spam se está registrando y se gira. Con vistas a actualizar a una cola de trabajos en una fecha posterior.
Se hicieron algunos comentarios acerca de preguntar al servidor de correo para que el usuario los verifique, sentí que esto sería demasiado tráfico y podría bloquear mi servidor o meterlo en problemas de alguna manera, y esto es solo para cortar la mayor parte del correos electrónicos que se recuperaban debido a direcciones de servidor no válidas.
http://en.wikipedia.org/wiki/Fqdn y
RFC2821
The lookup first attempts to locate an MX record associated with the name.
If a CNAME record is found instead, the resulting name is processed as if
it were the initial name.
If no MX records are found, but an A RR is found, the A RR is treated as
if it was associated with an implicit MX RR, with a preference of 0,
pointing to that host. If one or more MX RRs are found for a given
name, SMTP systems MUST NOT utilize any A RRs associated with that
name unless they are located using the MX RRs; the "implicit MX" rule
above applies only if there are no MX records present. If MX records
are present, but none of them are usable, this situation MUST be
reported as an error.
Muchas gracias a todos (especialmente ZoogieZork por la punta Un repliegue registro)
+1 .. nunca he oído hablar de comprobación de un correo electrónico válida comprobando los registros MX .. eso es una buena idea que pienso. – Earlz
Tenga en cuenta que debe verificar el registro A si no aparece un registro MX, como se define en RFC 5321. Es raro, pero algunos dominios no tienen un registro MX (por varias razones). Más información: http://en.wikipedia.org/wiki/MX_record#History_of_fallback_to_A – ZoogieZork
Cheers Zork, exactamente el tipo de problemas que me preocupaban. –