¿Cómo puede un servidor de correo detectar direcciones de correo electrónico rechazadas?

Tienes que detectar el rebote. Eso no es necesariamente fácil. Hay dos formas diferentes de descubrir un rebote.

Una forma es si su código está haciendo directamente una conexión SMTP al servidor que es el responsable final de entregar el mensaje. Su código recibirá un error durante la transacción SMTP, y puede interpretar definitivamente ese error como una indicación de que el mensaje rebotó y ejecutar su código para eliminar un registro de su base de datos. De esa manera, sin embargo, será la excepción.

Por lo general, habrá al menos uno, y a menudo más de uno, saltos entre usted y el servidor que finalmente decide si acepta o rechaza el mensaje, haciendo imposible que su código detecte un rebote durante la transacción SMTP. En algunos casos, pero no en todos, en los que el servidor final decide rechazar el mensaje, se enviará un aviso de no entrega a la dirección que proporcionó en el encabezado de error de su mensaje. Su código puede monitorear ese buzón para mensajes entrantes. Puede interpretarlos y decidir cuáles son avisos de no entrega y luego seguir adelante y ejecutar cualquier código que necesite para eliminar el registro de su base de datos.

Lo que desea hacer es tener una dirección de correo electrónico de rebote “universal” como, < [correo electrónico protegido] >. Luego, el encabezado “Ruta de retorno” se establece en “< [correo electrónico protegido] >”.

Luego, puede enviar fácilmente los correos electrónicos que se reciben en el buzón “< [correo electrónico protegido] >” a un script PHP, que busca un criterio particular, por ejemplo, “Host remoto dijo”, un texto común en los avisos de rechazo de correo electrónico , y considera que todos los correos electrónicos con esta línea serán rechazados.

Luego actualice su tabla de base de datos con algo como a continuación.

$ servername = ““;
$ username = ““;
$ contraseña = ““;
$ dbname = ““;

función updateMysql ($ clave) {
tratar {
$ dbconn = new PDO (“mysql: host = $ servername; dbname = $ dbname”, $ username, $ password);
$ dbconn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
$ sql = “ACTUALIZAR SET = 1 DONDE = ‘$ clave'”;
$ stmt = $ dbconn-> prepare ($ sql);
$ stmt-> execute ();
// Opcionalmente, haga eco de un mensaje para decir que la ACTUALIZACIÓN se realizó correctamente.
echo $ stmt-> rowCount (). “registros ACTUALIZADOS con éxito”;
}
catch (PDOException $ e)
{
echo $ sql. “
“. $ e-> getMessage ();
}
$ dbconn = nulo;
}

ELIMINAR DE MailAddress
DONDE ENTRADA
(SELECCIONAR addr.ROWID
DESDE MailAddress addr
INICIAR UNIRSE Iniciar sesión en MailLog (addr.Address = log.Address)
WHERE (log.Failed = True));

Algo así (no probado).

Esto supone que agrega a una tabla de registro cuando envía un correo electrónico y ejecuta el SQL periódicamente para purgar las direcciones fallidas.