scripts/admin/mail_invalide/mail_invalide.py
Antoine Durand-Gasselin 4a68475e34 [wiki-lenny] suppression de static/
darcs-hash:20090314092631-bd074-b01256aeaf71e935851b3ecdbd623eaae8c9e8a1.gz
2009-03-14 10:26:31 +01:00

161 lines
5.4 KiB
Python

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import sys,os,string,time,locale
locale.setlocale(locale.LC_ALL,'')
sys.path.append("/usr/scripts/gestion")
from email_tools import format_sender
# Import de la base de données
sys.path.append('/usr/scripts/gestion')
from ldap_crans import crans_ldap
db = crans_ldap()
# Détermination de l'uid du cableur
uid = os.getenv('SUDO_UID')
if not uid :
print "Impossible de déterminer l'utilisateur"
sys.exit(1)
cableur = db.search('uidNumber=%s' % os.getenv('SUDO_UID'),'w')['adherent'][0]
os.chdir("/usr/scripts/admin/mail_invalide")
SRC = "/usr/scripts/admin/src"
# Nom des fichiers
headers = SRC + "/mail_invalide_debut.tex"
texsrc = SRC + "/mail_invalide_texte.tex"
pdf = time.strftime("mail_invalide-%d-%m-%Y_%Hh%M.pdf",time.localtime(time.time()))
# Fichiers temporaires à supprimer à la fin
mailtex = "mailtmp.tex"
barcode = "barcode.eps"
# Détection d'un manquement d'argument
if len(sys.argv) == 1 :
sys.exit("Erreur: aucune adresse mail fournie")
# On prend la liste des adresses mails données en argument
adresses = sys.argv
# On vire pour celà l'appel au script
adresses.pop(0)
if len(adresses) == 1 :
text = "Bonjour\n\n \
Voici la fiche d'avertissement à remettre à l'adhérent concerné pour\n \
l'informer que l'adresse mail qu'il a fourni n'est pas valide.\n\n \
Il faut donc imprimer la feuille et la mettre dans sa boîte aux\n \
lettres.\n\n"
else :
text = "Bonjour\n\n \
Voici les fiches d'avertissement à remettre aux adhérents concernés\n \
pour les informer que l'adresse mail qu'ils ont fourni n'est pas valide.\n\n \
Il faut donc imprimer les feuilles et les mettre dans les boîtes aux\n \
lettres correspondantes.\n\n"
text += "-- \nUn script exécuté par %s\n\n" % cableur.Nom().encode('iso8859-1')
text += os.popen("/usr/games/fortune",'r').read()
os.system("cp %s %s" % (headers, mailtex))
file = open(mailtex,'r+')
file.read()
chbres = []
for adresse in adresses :
os.system("barcode -n -E -b %s%s -o %s" % (adresse,time.strftime("%Y%m%d-%H%M",time.localtime()),barcode))
data = db.search("mail=%s" % adresse,'w')
try :
adherent = data['adherent'][0]
prenom = adherent.prenom().encode('iso8859-15')
nom = adherent.nom().encode('iso8859-15')
chbre = adherent.chbre()
# L'adhérent a une adresse mail invalide
adherent.mail_invalide(True)
adherent._save()
except :
print("Erreur : l'adresse < %s > n'a pas été trouvée dans la base" % adresse)
adresses.remove(adresse)
if len(adresses) == 0 :
sys.exit("Aucune adresse valide")
continue
chbres.append(chbre)
date = time.strftime("%A %d %B %Y",time.localtime(time.time()+15*24*3600))
if adresse == adresses[0] :
file.write("\\newcommand{\prenom}{%s}\n" % prenom)
file.write("\\newcommand{\\nom}{%s}\n" % nom)
file.write("\\newcommand{\chambre}{%s}\n" % chbre)
file.write("\\newcommand{\email}{\url{%s}}\n" % adresse)
file.write("\\newcommand{\deconnexion}{%s}\n" % date)
else :
file.write("\\renewcommand{\prenom}{%s}\n" % prenom)
file.write("\\renewcommand{\\nom}{%s}\n" % nom)
file.write("\\renewcommand{\chambre}{%s}\n" % chbre)
file.write("\\renewcommand{\email}{\url{%s}}\n" % adresse)
file.write("\\renewcommand{\deconnexion}{%s}\n" % date)
tex_src = open(texsrc, 'r')
file.write(tex_src.read())
tex_src.close()
if adresse != adresses[len(adresses)-1] :
file.write('\\newpage')
else :
file.write('\end{document}')
file.close()
#os.system("latex %s" % mailtex)
os.system("latex \\\\nonstopmode\\\\input %s 1> /dev/null" % mailtex)
os.system("dvips %s 2> /dev/null" % mailtex.replace('.tex','.dvi'))
os.system("ps2pdf %s %s" % (mailtex.replace('.tex','.ps'),pdf))
# Génération du mail avec la pièce jointe
import smtplib
# Here are the email pacakge modules we'll need
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.Encoders import encode_base64
msg = MIMEMultipart()
msg['Subject'] = "Fiche(s) d'avertissement de mail invalide - %s" % time.strftime("%d/%m/%Y",time.localtime(time.time()))
msg['From'] = format_sender(u"%s <%s>" % (cableur.Nom(), cableur.mail()))
msg['To'] = format_sender(u"Câbleurs <respbats@crans.org>")
msg['Cc'] = format_sender(u"Disconnect Team <disconnect@crans.org>")
# msg.preamble = text
# Guarantees the message ends in a newline
# msg.epilogue = ''
fp = open(pdf, 'rb')
img = MIMEBase('application','pdf')
img.set_payload(fp.read())
fp.close()
encode_base64(img) # Ils auraient pu soigner...
img.add_header('Content-Disposition', 'attachment', filename=pdf)
text = MIMEText(text, 'plain', 'iso-8859-1')
msg.attach(text)
msg.attach(img)
while (1 == 1):
print "Mail formaté, prêt à l'envoi."
print " [Envoyer, Abandonner]"
r = sys.stdin.readline().strip()
if (r == "e" or r == "E"):
# Send the email via our own SMTP server.
s = smtplib.SMTP()
s.connect()
s.sendmail(msg['From'], (msg['To'],msg['Cc']), msg.as_string())
s.close()
print "Mail envoyé !"
break
if (r == "a" or r == "A"):
print "Abandon"
os.system("rm -f %s" % pdf)
break
os.system("rm -f %s %s" % (mailtex.replace(".tex",".*"),barcode))