From 20fdae6ac24b7f6d75d28c82e14fc0a04f85d31d Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Wed, 8 May 2013 01:23:10 +0200 Subject: [PATCH] utils/sendmail, deconnexion.py et config/mails/upload.py : envoie de mail avec une classe pour instancier les messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Idéalement, il faudrait passer tous les mails de la conf sous ce format et les instancier tous comme ça. Ça permet d'encoder proprement les headers avec éventuellement des variables dedans. --- gestion/config/mails/upload.py | 63 +++++++++------------------------- surveillance/deconnexion.py | 5 ++- utils/sendmail.py | 18 ++++++++++ 3 files changed, 37 insertions(+), 49 deletions(-) diff --git a/gestion/config/mails/upload.py b/gestion/config/mails/upload.py index 72d0e44a..c9aaba59 100644 --- a/gestion/config/mails/upload.py +++ b/gestion/config/mails/upload.py @@ -3,6 +3,10 @@ from email.header import Header +import sys +sys.path.append("/usr/scripts") +from utils.sendmail import Message + """ Templates des mails envoyés en cas d'upload. """ #: Envoyé à l'adhérent en cas de dépassement de la limite soft @@ -45,44 +49,6 @@ pas branchées sur le CRANS. Disconnect team""" % {'subject': Header('[Cr@ns] Attention !', 'utf-8')} -class Message_adherent_soft(object): - template = u"""Bonjour %%(proprio)s, - -Nous t'informons que ta (tes) machine(s) envoie(nt) une quantité -importante de données vers l'extérieur (%%(upload)s Mo en 24 heures). - -*Ce message t'est envoyé à titre informatif, il ne te sanctionne pas.* - -Il signifie que tu as envoyé plus de 300 Mo au cours des dernières 24 -heures. Cela peut venir du fait que, *par exemple*, tu essaies -d'envoyer des fichiers de grosse taille à l'extérieur de la zone -crans, ou encore que tu as fait une utilisation importante de -logiciels envoyant une très grande quantité de petites données -(vidéo-conférence par exemple). Il peut y avoir d'autres raisons. - - -Si cela continuait, et que tu dépassais la limite acceptable des 3789 -Mo sur 24 heures, ton débit serais automatiquement fortement limité pour -une durée de 24 heures. Il t'appartient donc de surveiller cela de -plus près et de faire en sorte que tes machines n'uploadent pas de -manière excessive à l'avenir. - - -Pour plus d'informations, tu peux consulter la page: -http://wiki.crans.org/VieCrans/DéconnexionPourUpload - -Si tu as des questions, contacte disconnect@crans.org - -N.B. : L'upload consiste en l'envoi de données vers des machines n'étant -pas branchées sur le CRANS. - ---\u0020 -Disconnect team""" - - def __init__(self): - self.subject = u"[Cr@ns] Attention !" - - #: Envoyé à l'adhérent en cas de dépassement de la limite hard message_hard = u"""From: %%(from)s To: %%(to)s @@ -121,13 +87,9 @@ Content-Type: text/plain; charset="utf-8" --\u0020 Message créé par deconnexion.py""" -#: Envoyé à la ML disconnect@ en cas de dépassement de la limite hard -message_disconnect_hard = u"""From: %(from)s -To: %(to)s -Subject: %(proprio)s a =?utf-8?q?=C3=A9t=C3=A9_brid=C3=A9?= -Content-Type: text/plain; charset="utf-8" - -%(proprio)s (%(id)s) a été limité en débit montant du fait d'un +class Message_disconnect_hard(Message): + """Envoyé à la ML disconnect@ en cas de dépassement de la limite hard""" + template = u"""%(proprio)s (%(id)s) a été limité en débit montant du fait d'un upload excessif (%(upload)s Mo). Ses machines ont été aperçues pour la dernière fois à ces endroits : @@ -136,7 +98,16 @@ Ses machines ont été aperçues pour la dernière fois à ces endroits : La chambre de l'adhérent est %(chambre)s. --\u0020 -Message créé par deconnexion.py""" +Message créé par deconnexion.py + +""" + (" __1__"+10*" "+3*"%"+","+7*"%"+"\n \_._/"+11*" "+",'%% \\-*"+7*"%"+"\n ( ^ )"+5*" "+";"+5*"%"+"*% _%%%%\"\n"+2*" "+"`='|\."+4*" "+",%%%"+7*" "+"\(_.*%%%%.\n"+4*" "+"/ |"+4*" "+"% *%%, ,"+4*"%"+"*("+4*" "+"'\n (/ | %^"+5*" "+",*%%% )\|,%%*%,_\n |__, |"+7*" "+"*%"+4*" "+"\/ #).-\"*%%*\n | |"+11*" "+"_.) ,/ *%,\n | | "+9*"_"+"/)#("+12*"_"+"\n /___| |"+25*"_"+"|\n ===").replace("%", "%%") + + def __init__(self, emetteur, destinataires, proprio, id, upload, mdc, chambre): + self.proprio = proprio + self.id, self.upload, self.mdc, self.chambre = id, upload, mdc, chambre + self.objet = u"%s a été bridé" % (proprio) + self.corps = self.template + super(Message_disconnect_hard, self).__init__(emetteur, destinataires, self.objet, self.corps) #: Envoyé à la ML disconnect@ en cas de dépassement de la limite hard plusieurs fois message_disconnect_multi = u"""From: %(from)s diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index d4951471..ffe3eb61 100755 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -258,9 +258,8 @@ for elupload, eltype, elid in uploadeurs: theid = "cid=" else: theid = "aid=" - corps = config.mails.upload.message_disconnect_hard % {'from': upload.expediteur, 'to': upload.expediteur, 'upload': elupload, 'proprio': proprio.Nom(), 'mdc': mdcf, 'chambre': proprio.chbre(), 'id': theid + proprio.id()} - corps = corps.encode('utf-8') - mail.sendmail(upload.expediteur, upload.expediteur, corps) + mail = config.mails.upload.Message_disconnect_hard(upload.expediteur, upload.expediteur, proprio=proprio.Nom(), id=theid + proprio.id(), upload=elupload, mdc=mdcf, chambre=proprio.chbre()) + mail.send() # Vérification du nombre de déconnexions ######################################### diff --git a/utils/sendmail.py b/utils/sendmail.py index fa03782a..ca82fd92 100644 --- a/utils/sendmail.py +++ b/utils/sendmail.py @@ -43,6 +43,24 @@ def sendmail(emetteur, destinataires, objet, message, cc=[], more_headers={}, de mail = create_mail(emetteur, destinataires, objet, message, cc, more_headers) actually_sendmail(emetteur, destinataires, mail, debug) +class Message(object): + """Message pré-formaté à envoyer à un adhérent ou une ML""" + def __init__(self, emetteur, destinataires, objet, corps, cc=[], more_headers={}): + self.emetteur = emetteur + self.destinataires = destinataires + self.objet = objet + self.cc = cc + self.more_headers = more_headers + self.corps = corps % self.__dict__ + + def mail(self): + """Fabrique le mail""" + return create_mail(self.emetteur, self.destinataires, self.objet, + self.corps, self.cc, self.more_headers) + + def send(self): + """Envoie le mail""" + return actually_sendmail(self.emetteur, self.destinataires, self.mail()) if __name__ == "__main__": print "Exemple d'utilisation :"