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, )