File size: 1,443 Bytes
3345ea7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from email.message import EmailMessage

import aiosmtplib


class EmailClient:
    def __init__(self):
        self.smtp_server = os.getenv("SMTP_SERVER")
        self.smtp_port = int(os.getenv("SMTP_PORT"))
        self.username = os.getenv("SMTP_USERNAME")
        self.password = os.getenv("SMTP_PASSWORD")

    async def __aenter__(self):
        return self

    async def __aexit__(self, exc_type, exc, tb):
        pass

    async def send_email(
        self,
        subject: str,
        body: str,
        to_emails: list,
        attachments: list = None,
    ):
        message = EmailMessage()
        message["From"] = os.getenv("SENDER_EMAIL")
        message["To"] = ", ".join(to_emails)
        message["Subject"] = subject
        message.set_content(body)
        if attachments:
            for attachment in attachments:
                with open(attachment, "rb") as file:
                    file_data = file.read()
                    file_name = file.name
                message.add_attachment(
                    file_data,
                    maintype="application",
                    subtype="octet-stream",
                    filename=file_name,
                )
        await aiosmtplib.send(
            message,
            hostname=self.smtp_server,
            port=self.smtp_port,
            username=self.username,
            password=self.password,
            start_tls=True,
        )