From 80be53e2f5067fbe5f9db7718d5b0d1cea958529 Mon Sep 17 00:00:00 2001 From: Sylvain Boilard Date: Mon, 12 Nov 2012 19:49:06 +0100 Subject: [PATCH] =?UTF-8?q?[print=5Fstatus]=20On=20=C3=A9vite=20de=20crash?= =?UTF-8?q?er=20si=20le=20serveur=20SMTP=20nous=20demande=20d'attendre=20p?= =?UTF-8?q?arce=20qu'on=20envoie=20trop=20de=20mails.4~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ignore-this: f87d2d2dcc2cbbad5371478782157c66 darcs-hash:20121112184906-8ef3c-b962b40959a3bf17bc25a6b908f57579b5a3c9e4.gz --- impression/print_status.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/impression/print_status.py b/impression/print_status.py index 8aa91d8d..b300c028 100755 --- a/impression/print_status.py +++ b/impression/print_status.py @@ -19,7 +19,7 @@ sys.path.append("/usr/scripts/gestion") import time import httplib2 import re -from smtplib import SMTP +import smtplib from ldap_crans import crans_ldap last_print_filename = "/var/run/print_status/last_print.txt" @@ -84,6 +84,19 @@ def buildDate(date): hour, minute, _ = hms.split(':') return u"le " + day + u" " + litMonths[int(month) - 1] + u" " + year + u" à " + hour + u":" + minute +def sendMail(from_addr, to_addrs, mail_content): + """Wrapper pour smtplib.sendmail(). Permet d'attendre un peu en cas d'erreur temporaire (typiquement, si on essaie d'envoyer trop de mails à la minute).""" + conn = SMTP(smtp_server) + try: + conn.sendmail(from_addr, to_addrs, mail_content) + except smtplib.SMTPSenderRefused as (code, _, _): + if code == 450: + time.sleep(65) + conn.sendmail(from_addr, to_addrs, mail_content) + else: + raise + conn.quit() + http = httplib2.Http() # On récupère la liste des tâches et on enlève les entêtes. @@ -128,24 +141,19 @@ for item in task_list: else: target = db_query['club'][0] full_name = u"Club " + target.nom() - send_to = [] - for aid in target.imprimeurs(): - send_to.append(db.search("aid=" + aid)['adherent'][0].mail() + u"@crans.org") + send_to = map(lambda aid : db.search("aid=" + aid)['adherent'][0].mail() + u"@crans.org", target.imprimeurs()) historique = target.historique() historique.reverse() # Ce qu'on cherche a des chances d'être récent et donc d'être à la fin de l'historique. for hist_line in historique: if match_taskID.search(hist_line): filename = match_doc_name.search(hist_line).group()[1:] break - conn = SMTP(smtp_server) if result == "OK": - for dest in send_to: - mail_content = ok_mail % (error_send_to, dest, filename, full_name, filename, date, error_send_to) - conn.sendmail(error_send_to, dest, mail_content.encode("utf-8")) + mail_content = ok_mail % (error_send_to, u", ".join(send_to), filename, full_name, filename, date, error_send_to) + sendMail(error_send_to, send_to, mail_content.encode("utf-8")) else: mail_content = error_mail % (error_send_to, error_send_to, filename, taskID, full_name, user, date, result, u"\n".join(send_to)) - conn.sendmail(error_send_to, error_send_to, mail_content.encode("utf-8")) - conn.quit() + sendMail(error_send_to, error_send_to, mail_content.encode("utf-8")) # Éventuellement, on met à jour le numéro de la dernière tâche traitée. new_last = task_list[0].split(',', 1)[0]