
Ignore-this: 57875a22b7c26a01dcd51b9331c93997 darcs-hash:20121031171234-b6762-b3c312f180024717569702a58bd59ed8a3cc0a83.gz
98 lines
3.5 KiB
Python
98 lines
3.5 KiB
Python
#! /usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Envoi d'un mail donné à certains adherents
|
|
# Premier parametre : critere de recherche
|
|
# Second parametre, fichier à envoyer
|
|
|
|
import smtplib, sys, os, ldap_crans, time, socket, commands
|
|
from email_tools import format_sender
|
|
from affich_tools import cprint
|
|
|
|
def postconf(i):
|
|
"Fixe la fréquence d'envoi maximale par client (en msg/min)"
|
|
os.system("/usr/sbin/postconf -e smtpd_client_message_rate_limit=%s" % i)
|
|
os.system("/etc/init.d/postfix reload")
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 3:
|
|
cprint(u"""Usage:
|
|
|
|
Ce script permet d'envoyer un mail à toute une catégorie d'adhérents.
|
|
|
|
Le premier paramètre est le critère de recherche :
|
|
paiement=ok pour les adhérents en règle
|
|
paiement=ok&paiement!=2004 pour ceux qui n'ont pas encore payé pour cette année
|
|
chbre=????&paiement=ok pour ceux dont la chambre est inconnue
|
|
paiement=ok&carteEtudiant!=2004 pour ceux qui n'ont pas de carte d'étudiant
|
|
|
|
Le second paramètre est un fichier texte qui contient le message à envoyer. Il
|
|
doit également contenir les entêtes, à l'exception du destinataire qui sera rajouté
|
|
par le script.
|
|
|
|
/!\ Ce script ne demande aucune confirmation, il faut veiller à
|
|
vérifier avec who que l'on cible bien les utilisateurs que l'on
|
|
veut. Et si on veut vérifier que le mail a une bonne tête on se
|
|
l'envoie d'abord en mettant login=machin comme critère de
|
|
recherche.
|
|
|
|
/!\ Ce script a pour but de spammer, et spammer c'est mal. Il faut
|
|
donc contourner les limitations qui ont été mises en place au
|
|
Cr@ns. Si plus de 10 mails doivent être envoyés, il faut le faire
|
|
depuis rouge, et ce en root.
|
|
""")
|
|
sys.exit(0)
|
|
|
|
# On en est là
|
|
# On ouvre la base et on cherche
|
|
adherents = ldap_crans.crans_ldap().search(sys.argv[1])['adherent']
|
|
cprint(u"%d adhérent(s) a/ont été trouvé(s)..." % len(adherents))
|
|
time.sleep(3) # On dort un peu, ctrl-c welcome
|
|
|
|
# opt = commands.getoutput("/usr/sbin/postconf smtpd_client_message_rate_limit")
|
|
# limit = int(opt.split()[-1])
|
|
# if limit > 0 and len(adherents) >= 10:
|
|
# limit_risen = True
|
|
# postconf(0)
|
|
# else: limit_risen = False
|
|
limit_risen = False
|
|
|
|
try:
|
|
try:
|
|
fichier = open(sys.argv[2])
|
|
texte = fichier.read()
|
|
fichier.close()
|
|
except IOError:
|
|
cprint(u"Impossible d'ouvrir le fichier à envoyer, merci, au revoir.")
|
|
sys.exit(1)
|
|
|
|
echecs = []
|
|
s = smtplib.SMTP()
|
|
s.connect('smtp.crans.org')
|
|
for adherent in adherents:
|
|
mail = adherent.mail().encode("iso-8859-15", "ignore")
|
|
if "@" not in mail:
|
|
mail = mail + "@crans.org"
|
|
cprint(u"Envoi du mail à %s <%s>..." % (adherent.Nom(), mail))
|
|
try:
|
|
recipient = format_sender(u'"%s" <%s>\n' % (adherent.Nom(), mail))
|
|
s.sendmail('bulk+%s@crans.org' % mail.replace("@",'-at-'),
|
|
(mail,),
|
|
"To: %s\n%s" % (recipient, texte))
|
|
except:
|
|
cprint(u"Erreur lors de l'envoi à %s <%s>..." % (adherent.Nom(), mail), "rouge")
|
|
echecs.append(mail)
|
|
else:
|
|
# Tout va bien
|
|
pass
|
|
|
|
if echecs:
|
|
print "\nIl y a eu des erreurs :"
|
|
print echecs
|
|
|
|
s.close()
|
|
|
|
# On rétablit la conf de postfix
|
|
finally:
|
|
if limit_risen: postconf(limit)
|
|
|
|
|