''' usage: m = Mail("mail-auto@bas-rhin.fr", ["destinataire@bas-rhin.fr"], "mon mail", "mon message") m.send() ''' from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import logging.handlers import smtplib class Mail(): HOST = "" def __init__(self, fromaddr, toaddrs, subject, msg): self.mailport = None self.fromaddr = fromaddr self.toaddrs = toaddrs self.subject = subject self.msg = msg self.mail = MIMEMultipart('alternative') self.mail['Subject'] = self.subject self.mail['From'] = self.fromaddr self.mail['To'] = ",".join(self.toaddrs) self.mail.attach(MIMEText(self.msg, 'html', _charset='utf-8')) def send(self): if not self.HOST: raise ValueError("Mail.HOST has to be defined before sending any mail") port = self.mailport if self.mailport else smtplib.SMTP_PORT with smtplib.SMTP(self.HOST, port) as smtp: smtp.sendmail(self.fromaddr, self.toaddrs, self.mail.as_string()) class BufferingSMTPHandler(logging.handlers.BufferingHandler): """ buffering email for logging """ def __init__(self, mailhost, fromaddr, toaddrs, subject, capacity): logging.handlers.BufferingHandler.__init__(self, capacity) self.mailhost = mailhost self.mailport = None self.fromaddr = fromaddr self.toaddrs = toaddrs self.subject = subject def flush(self): try: if len(self.buffer) > 0: port = self.mailport if self.mailport else smtplib.SMTP_PORT msg = "\n".join([self.format(record) for record in self.buffer]) msg = MIMEText(msg.encode('utf-8'), _charset='utf-8') msg['Subject'] = self.subject msg['From'] = self.fromaddr msg['To'] = ",".join(self.toaddrs) smtp = smtplib.SMTP(self.mailhost, port) smtp.sendmail(self.fromaddr, self.toaddrs, msg.as_string()) smtp.quit() self.buffer = [] except Exception as e: print(e) raise if __name__ == "__main__": mail = Mail("", ["olinox14@yahoo.fr"], "test", "test") mail.send()