/
mailsender.py
63 lines (47 loc) · 1.9 KB
/
mailsender.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from email.mime.image import MIMEImage
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
class MailSender(object):
def __init__(self, username, password, server='smtp.gmail.com', port=587, use_tls=True):
self.username = username
self.password = password
self.server = server
self.port = port
self.use_tls = use_tls
def send(self, sender, recipients, subject, message_plain='', message_html='', images=None):
'''
:param sender: str
:param recipients: [str]
:param subject: str
:param message_plain: str
:param message_html: str
:param images: [{id:str, path:str}]
:return: None
'''
msg_related = MIMEMultipart('related')
msg_related['Subject'] = subject
msg_related['From'] = sender
msg_related['To'] = ', '.join(recipients)
msg_related.preamble = 'This is a multi-part message in MIME format.'
msg_alternative = MIMEMultipart('alternative')
msg_related.attach(msg_alternative)
plain_part = MIMEText(message_plain, 'plain')
html_part = MIMEText(message_html, 'html')
msg_alternative.attach(plain_part)
msg_alternative.attach(html_part)
if images:
for image in images:
with open(image['path'], 'rb') as f:
msg_image = MIMEImage(f.read())
msg_image.add_header('Content-ID', '<{0}>'.format(image['id']))
msg_related.attach(msg_image)
# Sending the mail
server = smtplib.SMTP('{0}:{1}'.format(self.server, self.port))
try:
if self.use_tls:
server.starttls()
server.login(self.username, self.password)
server.sendmail(sender, recipients, msg_related.as_string())
finally:
server.quit()