LAs3R a écrit :
tu peut faire une nslookup pour trouver le/les Mails eXchanger (jndi)
s'il n'y en a pas c'est que le domaine n'existe pas
exple:
Code :
- /**
- * récupère, pour un nom de domaine donné, les Mail eXchangers associés
- * @return MXRecord liste des MX; si aucun MX n'est trouvé, la liste retournée sera vide
- */
- public MXRecord[] MXLookup(String domain) throws NamingException {
- Hashtable env = new Hashtable();
- env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory" );
- env.put("java.naming.provider.url", "dns://" + dns + "/" );
- DirContext ictx = new InitialDirContext(env);
- Attributes namingAttributes = ictx.getAttributes(domain, new String[] { "MX" });
- ArrayList MXrecords = new ArrayList();
- for(NamingEnumeration namingEnum = namingAttributes.getAll(); namingEnum.hasMore();) {
- BasicAttribute basicAttribute = (BasicAttribute) namingEnum.next();
- for (NamingEnumeration MXenum = basicAttribute.getAll(); MXenum.hasMore();) {
- MXrecords.add(new MXRecord((String)MXenum.next()));
- }
- }
- Collections.sort(MXrecords);
- return (MXRecord[]) MXrecords.toArray(new MXRecord[0]);
- }
|
ensuite tu "demandes" a chaque MX s'il connait ou non le compte mail, il faut ouvrir une communication SMTP via socket classique avec les messages suivants :
1. HELO.
2. MAIL FROM:<tonadressemailatoi@toto.com> 3. RCPT TO:<adresseaverifier@toto.com>
si toutes les réponses sont positives (>= 200 et < 300) alors l'adresse est reconnu par le MX sinon elle ne l'est pas
voila
NB : la vérification du nom de domaine est fiable. Par contre pour solliciter les MX c'est le contraire. De nombreux MX sont configurés de maniere à répondre toujours positivement ou toujours négativement (a cause du spam généralement) et donc c'est pas super fiable.
Le meilleur moyen de vérifier la validité d'une adresse mail est (comme il a été dit plus haut) d'envoyer un mail au client lui demandant d'activer som compte par exple...
edit : avant de faire cela il faut vérifier la syntaxe de l'email (si tu est en jdk1.4 ou plus tu peux utiliser les expression régulieres (deja dit je sais)
|