
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.
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""API pour envoyer facilement un mail en python
|
|
Author: Vincent Le Gallic <legallic@crans.org>
|
|
|
|
"""
|
|
|
|
#: 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
|
|
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
|
|
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:
|
|
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("passoire@crans.org", ["nobody@crans.org", "root@crans.org"], "[Test] Envoi de mail", "Ceci est un message envoyé par un script.\\n-- \\nsendmail.py")'
|