#!/usr/bin/env python # -*- coding: utf-8 -*- """API pour envoyer facilement un mail en python Author: Vincent Le Gallic """ #: Librairie de communication SMTP import smtplib #: Pour fabriquer un mail en MIME from email.mime.text import MIMEText #: Pour encoder le mail en utf-8 from email import Charset from email.Utils import formatdate Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8') def create_mail(emetteur, destinataires, objet, message, cc=[], more_headers={}): """Fabrique un mail""" if not isinstance(destinataires, list): destinataires = [destinataires] mail = MIMEText(message, "plain", "utf-8") mail["From"] = emetteur mail["To"] = u", ".join(destinataires) mail["Subject"] = objet mail["Date"] = formatdate(localtime=True) more_headers.setdefault("X-Mailer", "/usr/scripts/utils/sendmail.py") for k in more_headers.keys(): mail[k] = more_headers[k] if cc != []: mail["Cc"] = u", ".join(cc) return mail def actually_sendmail(emetteur, destinataires, mail, debug=False): """Envoie un mail en dialoguant avec le serveur SMTP""" if debug: print mail.as_string() else: # TODO méthode lazy de connexion au smtp + recyclage d'une ancienne # connexion ?? s = smtplib.SMTP('smtp.adm.crans.org') s.sendmail(emetteur, destinataires, mail.as_string()) s.quit() def sendmail(emetteur, destinataires, objet, message, cc=[], more_headers={}, debug=False): """Fabrique le mail et l'envoie""" 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 :" print ">>> import sendmail" print '>>> sendmail.sendmail(u"passoire@crans.org", [u"nobody@crans.org", u"root@crans.org"], u"[Test] Envoi de mail", u"Ceci est un message envoyé par un script.\\n-- \\nsendmail.py")'