161 lines
5.4 KiB
Python
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))
|