Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class EmailSender(object):
- def __init__(self, user, password, server_host, port=25, sender_name=None):
- self.password = password
- self.user = user
- self.server_host = server_host
- self.port = port
- self.sender_name = sender_name
- self.subject = "default subject"
- self.recipient_list = []
- self.recipient_address_list = []
- self.msg_content = 'from email sender'
- self.msg = MIMEMultipart()
- self.attached = 0
- def add_recipient(self, address, name):
- formatted = formataddr((Header(name, 'utf-8').encode(), address))
- self.recipient_list.append(formatted)
- self.recipient_address_list.append(address)
- return self
- def set_content(self, message):
- self.msg_content = message
- return self
- def add_attachment(self, file_path, main_type, sub_type, file_name=None):
- if not file_name:
- file_name = file_path.split('/')[-1]
- with open(file_path, 'rb') as f:
- mime = MIMEBase(_maintype=main_type, _subtype=sub_type, filename=file_name)
- mime.add_header('Content-Disposition', 'attachment', filename=file_name)
- mime.add_header('Content-ID', '<{}>'.format(self.attached))
- mime.add_header('X-Attachment-Id', str(self.attached))
- mime.set_payload(f.read())
- encoders.encode_base64(mime)
- self.msg.attach(mime)
- return self
- def set_subject(self, subject):
- self.subject = Header(subject, 'utf-8').encode()
- return self
- def send(self):
- if not self.sender_name:
- name, addr = parseaddr(self.user)
- from_ = Header(name, 'utf-8').encode()
- else:
- from_ = Header(self.sender_name, 'utf-8').encode()
- to_ = ','.join(self.recipient_list)
- mime_text = MIMEText(self.msg_content, 'plain', 'utf-8')
- self.msg.attach(mime_text)
- self.msg['From'] = from_
- self.msg['To'] = to_
- self.msg['Subject'] = self.subject
- server = smtplib.SMTP(self.server_host, self.port)
- server.starttls()
- server.login(self.user, self.password)
- server.sendmail(from_addr=self.user, to_addrs=self.recipient_address_list, msg=self.msg.as_string())
- server.quit()
Add Comment
Please, Sign In to add comment