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
« 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
5from loguru import logger
7from cstlcore.settings import settings
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"))
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