mail.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. '''
  2. usage:
  3. m = Mail("mail-auto@bas-rhin.fr", ["destinataire@bas-rhin.fr"], "mon mail", "mon message")
  4. m.send()
  5. '''
  6. from email.mime.multipart import MIMEMultipart
  7. from email.mime.text import MIMEText
  8. import logging.handlers
  9. import smtplib
  10. class Mail():
  11. HOST = ""
  12. def __init__(self, fromaddr, toaddrs, subject, msg):
  13. self.mailport = None
  14. self.fromaddr = fromaddr
  15. self.toaddrs = toaddrs
  16. self.subject = subject
  17. self.msg = msg
  18. self.mail = MIMEMultipart('alternative')
  19. self.mail['Subject'] = self.subject
  20. self.mail['From'] = self.fromaddr
  21. self.mail['To'] = ",".join(self.toaddrs)
  22. self.mail.attach(MIMEText(self.msg, 'html', _charset='utf-8'))
  23. def send(self):
  24. if not self.HOST:
  25. raise ValueError("Mail.HOST has to be defined before sending any mail")
  26. port = self.mailport if self.mailport else smtplib.SMTP_PORT
  27. with smtplib.SMTP(self.HOST, port) as smtp:
  28. smtp.sendmail(self.fromaddr, self.toaddrs, self.mail.as_string())
  29. class BufferingSMTPHandler(logging.handlers.BufferingHandler):
  30. """ buffering email for logging """
  31. def __init__(self, mailhost, fromaddr, toaddrs, subject, capacity):
  32. logging.handlers.BufferingHandler.__init__(self, capacity)
  33. self.mailhost = mailhost
  34. self.mailport = None
  35. self.fromaddr = fromaddr
  36. self.toaddrs = toaddrs
  37. self.subject = subject
  38. def flush(self):
  39. try:
  40. if len(self.buffer) > 0:
  41. port = self.mailport if self.mailport else smtplib.SMTP_PORT
  42. msg = "\n".join([self.format(record) for record in self.buffer])
  43. msg = MIMEText(msg.encode('utf-8'), _charset='utf-8')
  44. msg['Subject'] = self.subject
  45. msg['From'] = self.fromaddr
  46. msg['To'] = ",".join(self.toaddrs)
  47. smtp = smtplib.SMTP(self.mailhost, port)
  48. smtp.sendmail(self.fromaddr, self.toaddrs, msg.as_string())
  49. smtp.quit()
  50. self.buffer = []
  51. except Exception as e:
  52. print(e)
  53. raise
  54. if __name__ == "__main__":
  55. mail = Mail("",
  56. ["olinox14@yahoo.fr"],
  57. "test",
  58. "test")
  59. mail.send()