Coverage for src/cstlcore/emails/services.py: 27%

22 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2026-02-19 12:46 +0000

1import smtplib 

2from email.mime.multipart import MIMEMultipart 

3from email.mime.text import MIMEText 

4 

5from loguru import logger 

6 

7from cstlcore.settings import settings 

8 

9 

10def send_email(recipient_email: str, body: str, subject: str) -> bool: 

11 msg = MIMEMultipart() 

12 msg["From"] = settings.smtp.email 

13 msg["To"] = recipient_email 

14 msg["Subject"] = subject 

15 msg.attach(MIMEText(body, "plain")) 

16 

17 try: 

18 logger.info( 

19 f"Attempting to send email from {settings.smtp.email} to {recipient_email}" 

20 ) 

21 # Connect to Gmail's SMTP server 

22 server = smtplib.SMTP_SSL("smtp.gmail.com", 465) # Use SSL port 

23 server.login(settings.smtp.email, settings.smtp.password) 

24 server.send_message(msg) 

25 server.quit() 

26 logger.info(f"email sent successfully to {recipient_email}") 

27 return True 

28 except Exception as e: 

29 logger.error(f"Failed to send email: {e}") 

30 return False