Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. import smtplib
  2. import os
  3. import logging
  4. import re
  5. from email import encoders
  6. from email.mime.base import MIMEBase
  7. from email.mime.multipart import MIMEMultipart
  8. from email.mime.text import MIMEText
  9. from markdown import markdown
  10.  
  11. logging.basicConfig(format = u'%(levelname)-8s [%(asctime)s] %(message)s', level = logging.INFO, filename = 'logs/mail.log')
  12.  
  13. class Mail:
  14. """
  15. Класс Mail позволяет создавать и отправлять сообщения по электронной почте.
  16. Поддерживаются следующие элементы:
  17. отправка нескольким адресатам
  18. отправка текста, html, markdown, файлов
  19. логирование
  20. """
  21.  
  22. def __init__(self, username, password, smpt_server, smtp_port):
  23. self.username = username
  24. self.password = password
  25. self.smpt_server = smpt_server
  26. self.smtp_port = smtp_port
  27.  
  28. def create(self, emails: list, subject='', text='', html='', mark='', filename=None):
  29. """Формирование сообщения"""
  30.  
  31. addresses = []
  32.  
  33. for email in emails:
  34. if self.validate(email):
  35. addresses.append(email)
  36. logging.info('Email %s is valid' % email)
  37. else:
  38. logging.warning('Email %s is invalid' % email)
  39.  
  40. msg = MIMEMultipart()
  41. msg['From'] = self.username
  42. msg['To'] = ', '.join(addresses)
  43. msg['Subject'] = subject
  44.  
  45. msg.attach(MIMEText(text, 'plain'))
  46. msg.attach(MIMEText(html, 'html'))
  47. msg.attach(MIMEText(markdown(mark), 'html'))
  48.  
  49. if filename:
  50. with open(filename, 'rb') as attachment:
  51. part = MIMEBase('application', 'octet-stream')
  52. part.set_payload(attachment.read())
  53. encoders.encode_base64(part)
  54. part.add_header('Content-Disposition', 'attachment; filename= %s' % os.path.basename(filename))
  55. msg.attach(part)
  56.  
  57. self.message = msg
  58. self.emails = addresses
  59.  
  60. def send(self):
  61. """Отправка сообщения"""
  62.  
  63. server = smtplib.SMTP(self.smpt_server, self.smtp_port)
  64. server.starttls()
  65. server.login(self.username, self.password)
  66. result = server.sendmail(self.username, self.emails, self.message.as_string())
  67. logging.info('Email sent to %s' % ', '.join(self.emails))
  68. server.quit()
  69.  
  70. return result
  71.  
  72. def validate(self, email):
  73. """Валидация адреса почты"""
  74. if re.match('^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$', email) != None:
  75. return True
  76. return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement