PortalLVAM / Scheduler /mailer_quant.py
bullm's picture
Upload mailer_quant.py
120dec1
raw
history blame
2.44 kB
import email, smtplib, ssl
from datetime import datetime
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import os
class Mailer():
def __init__(self, subject, body, html, receiver):
self.subject = subject
self.body = body
self.html = html
self.sender_email = os.environ.get('EMAIL_SENDER')
self.receiver_email = receiver
self.password = os.environ.get('EMAIL_PASSWORD')
self.message = None
self.create_message()
def create_message(self, filepath=None, filename=None):
# Create a multipart message and set headers
message = MIMEMultipart()
message["From"] = self.sender_email
message["To"] = self.receiver_email
message["Subject"] = self.subject
message["Bcc"] = self.receiver_email # Recommended for mass emails
# Add body to email
if self.html:
message.attach(MIMEText(self.html, "html"))
elif self.body:
message.attach(MIMEText(self.body, "plain"))
#filename = "test.pdf" # In same directory as script
# Open PDF file in binary mode
if filepath and filename:
with open(filepath, "rb") as attachment:
# Add file as application/octet-stream
# Email client can usually download this automatically as attachment
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
# Encode file in ASCII characters to send by email
encoders.encode_base64(part)
# Add header as key/value pair to attachment part
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)
# Add attachment to message and convert message to string
message.attach(part)
self.text = message.as_string()
return
def send_message(self, receiver):
# Log in to server using secure context and send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
server.login(self.sender_email, self.password)
server.sendmail(self.sender_email, receiver, self.text)