Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import smtplib
- import os
- import logging
- import re
- from email import encoders
- from email.mime.base import MIMEBase
- from email.mime.multipart import MIMEMultipart
- from email.mime.text import MIMEText
- from markdown import markdown
- logging.basicConfig(format = u'%(levelname)-8s [%(asctime)s] %(message)s', level = logging.INFO, filename = 'logs/mail.log')
- class Mail:
- """
- Класс Mail позволяет создавать и отправлять сообщения по электронной почте.
- Поддерживаются следующие элементы:
- отправка нескольким адресатам
- отправка текста, html, markdown, файлов
- логирование
- """
- def __init__(self, username, password, smpt_server, smtp_port):
- self.username = username
- self.password = password
- self.smpt_server = smpt_server
- self.smtp_port = smtp_port
- def create(self, emails: list, subject='', text='', html='', mark='', filename=None):
- """Формирование сообщения"""
- addresses = []
- for email in emails:
- if self.validate(email):
- addresses.append(email)
- logging.info('Email %s is valid' % email)
- else:
- logging.warning('Email %s is invalid' % email)
- msg = MIMEMultipart()
- msg['From'] = self.username
- msg['To'] = ', '.join(addresses)
- msg['Subject'] = subject
- msg.attach(MIMEText(text, 'plain'))
- msg.attach(MIMEText(html, 'html'))
- msg.attach(MIMEText(markdown(mark), 'html'))
- if filename:
- with open(filename, 'rb') as attachment:
- part = MIMEBase('application', 'octet-stream')
- part.set_payload(attachment.read())
- encoders.encode_base64(part)
- part.add_header('Content-Disposition', 'attachment; filename= %s' % os.path.basename(filename))
- msg.attach(part)
- self.message = msg
- self.emails = addresses
- def send(self):
- """Отправка сообщения"""
- server = smtplib.SMTP(self.smpt_server, self.smtp_port)
- server.starttls()
- server.login(self.username, self.password)
- result = server.sendmail(self.username, self.emails, self.message.as_string())
- logging.info('Email sent to %s' % ', '.join(self.emails))
- server.quit()
- return result
- def validate(self, email):
- """Валидация адреса почты"""
- if re.match('^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$', email) != None:
- return True
- return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement