From f2fa428d8beb6741652c1e9fdf0b23fed0dbb6a6 Mon Sep 17 00:00:00 2001 From: Jan Losinski Date: Wed, 21 Mar 2018 05:13:21 +0100 Subject: [PATCH] Add the email sender. Signed-off-by: Jan Losinski --- sender.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 sender.py diff --git a/sender.py b/sender.py new file mode 100644 index 0000000..2167457 --- /dev/null +++ b/sender.py @@ -0,0 +1,39 @@ +import smtplib +from email.encoders import encode_base64 +from email.mime.application import MIMEApplication +from email.mime.multipart import MIMEMultipart +from email.utils import formatdate + + +class Sender: + def __init__(self, loop, from_addr, smtp_server, smtp_port, smtp_user=None, smtp_passwd=None): + self.from_addr = from_addr + self.loop = loop + self.host = smtp_server + self.port = smtp_port + self.user = smtp_user + self.passwd = smtp_passwd + + def _send_mail(self, job, data): + msg = MIMEMultipart() + msg['Subject'] = job.title + msg['From'] = self.from_addr + msg['To'] = job.user.kindle_mail + msg['Date'] = formatdate(localtime=True) + + mobi = MIMEApplication(data) + encode_base64(mobi) + mobi.add_header('Content-Disposition', + 'attachment; filename={id}.{format}'.format(id=job.article, format=job.format)) + + msg.attach(mobi) + + smtp = smtplib.SMTP(host=self.host, port=self.port) + smtp.starttls() + if self.user is not None: + smtp.login(self.user, self.passwd) + smtp.sendmail(self.from_addr, job.user.kindle_mail, msg.as_string()) + smtp.quit() + + async def send_mail(self, job, data): + return self.loop.run_in_executor(None, self._send_mail, job, data)