diff --git a/attributs.py b/attributs.py index 2b1390f..6070c7b 100644 --- a/attributs.py +++ b/attributs.py @@ -743,22 +743,27 @@ class mail(rightProtectedAttr): if str(self) in liste_exclue: return if attr in ["mailAlias", "canonicalAlias", 'mail']: - mail, end = str(self).split('@', 1) - if end.startswith('crans'): - try: - smtp = smtplib.SMTP(smtpserv) - smtp.putcmd("vrfy", mail) - res = smtp.getreply()[0] in [250, 252] - smtp.close() - except: - raise ValueError('Serveur de mail injoignable') - - if res: - raise ValueError("Le mail %s est déjà pris." % (str(self))) - else: + mail = str(self) + # On commence par vérifier auprès du serveur SMTP + # si l'adresse email est prise sur le réseau. Cela permet + # de tester aussi les adresses statiquement écrites dans + # aliases.db. + try: + smtp = smtplib.SMTP(smtpserv) + smtp.putcmd("vrfy", mail) + res = smtp.getreply()[0] in [250, 252] + smtp.close() + except: + raise ValueError('Serveur de mail injoignable') + # Si le SMTP n'est pas joignable, on joue à la roulette + # russe en demandant à LDAP, sans vérifier les aliases + # statiques… check = self.conn.search(u'mail=%s' % mail) if len(check) >= 1: - raise ValueError("Le mail %s est déjà pris." % (str(self))) + res = True + + if res: + raise ValueError("Le mail %s est déjà pris." % (str(self))) def parse_value(self, mail): if not re.match(u'^[-_.0-9A-Za-z]+@([A-Za-z0-9]{1}[A-Za-z0-9-_]+[.])+[a-z]{2,6}$', mail):