La función mail devuelve un "true" o "false" según pueda o no ejecutarse (conectar con el MTA para entregar el e-mail ..
eso no significa que lleguen a sus destinatario por médio de ese MTA (servidor SMTP, sendmail o similares que lo envie).
así que podrías usarlo tipo:
Código PHP:
if (@!mail(.....)){
// aquí registras tus errores.
}
se usa @ para "silenciar" los mensajes de error de esa única función .. y aprovechando que es un "booleano" lo que devuelve .. pues lo uso en un condicional (y lo niego ! para no hacer el else ...) .. SI hay error .. registro el error en mi BD o lo muestro o como corresponda ...
En la práctica .. la mayoría de veces PHP consigue conectar con el MTA del servidor para "entregarle" el e-mail .. PHP llegado este punto de "entrega" .. desconecta y si hay errores en la entrega final al destinatario es ese servidor de correo el que hará los re-intentos ("relay") para enviar el e-mail .. según esté configurado al N intento devolverá un e-mail al remitente diciendo el problema (a la cuenta que se especifique o al mismo remitente). Otros servidores de correo no emiten esas respuestas ...
La única solución para ver si realmente existe una cuenta de correo X o de los problemas que pueda tener .. es conectar vía socktes directo a ese servidor SMTP (si es que lo permite) e intentar mandar el e-mail .. ahí será cuando dé algún mensaje de error.
Lo más básico es comprobar vía régistros MX de la IP del
host (nombre@b
host.tal) si la cuenta existe como "servidor de e-mail" .. ahora .. que el usuario a su vez exista depende de ese servidor SMTP si deja conectarse a el para verlo ..
Para rematar todo esto .. el proceso es "leennnto" para hacer ese chequeo pues .. se conecta a X servidor (por sockets) y se empieza a "negociar" con parte del protocolo SMTP intentando el envio y leyendo las respuestas que se dan.
Un saludo,