File size: 2,444 Bytes
28fe2e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
64
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)