scripts/archive/gestion/mail-all.py
2015-09-13 17:59:50 +02:00

101 lines
3.6 KiB
Python
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash /usr/scripts/python.sh
# -*- 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 whos 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 redisdead, et en ayant pensé à désactiver la limite de mails
par minute :
# postconf -e 'smtpd_client_message_rate_limit = 0'
# service postfix reload
""")
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("utf-8", "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)