2 # -*- coding: utf-8 -*-
4 auf-esmtp-sizes — Vérification des tailles de messages ESMTP acceptées
6 Copyright : Agence universitaire de la Francophonie — www.auf.org
7 Licence : GNU General Public Licence, version 3
8 Auteur : Jean Christophe André
9 Date de création : 1 mars 2013
11 Dépendance Debian : python-dnspython
19 SMTP_TIMEOUT = 60 # 5 suffit pour la moitié, 30 ne suffit pas pour tout le monde
21 moinmoin = (len(sys.argv) > 1) and (sys.argv[1] == '--moinmoin')
23 # on cherche le meilleur MX, ou sinon le domaine lui-même
24 def get_mail_exchanger(domain):
27 for rdata in dns.resolver.query(domain + '.', 'MX'):
28 if rdata.preference < mx_preference:
29 mx_hostname = rdata.exchange.to_text()
30 mx_preference = rdata.preference
33 # on contacte le MX en ESMTP pour obtenir sa taille limite
36 smtp = smtplib.SMTP(mx, timeout=SMTP_TIMEOUT)
37 smtp.ehlo_or_helo_if_needed()
39 raise Exception("non joignable")
40 if not smtp.does_esmtp:
41 raise Exception("non compatible ESMTP ?!?")
43 size = int(smtp.esmtp_features['size'])
45 raise Exception("sans taille valide")
49 # liste des domaines internes de communication à l'AuF
50 domains = [u['redir'].split('@')[1] for u in aufrefer.get('annuaire.json')]
51 domains = [d for d in set(domains)]
55 today = time.strftime('%d/%m/%Y')
56 print u"== Tailles acceptées pour les courriels au %s ==" % today
57 print u"||'''Domaine'''||'''Taille acceptée'''||"
59 # pour chaque domaine, vérifier la taille sur le MX principal
60 for domain in domains:
61 mx = get_mail_exchanger(domain)
62 #print "Test de '%s'..." % mx
64 size = get_mx_size(mx)
67 print "||%s||''%s''||" % (domain, e.message)
69 print "Domaine '%s' %s." % (domain, e.message)
74 elif size <= 3*1024*1024:
76 elif size <= 10*1024*1024:
80 print "||%s||<)%s>%s||" % (domain, color, size)
82 print "Taille pour le domaine '%s' : %s" % (domain, size)