accujuris-api / app /services /email_service.py
arnavam's picture
Initial HuggingFace deployment
cd3078d
import logging
from typing import Optional
from app.config import settings
logger = logging.getLogger(__name__)
async def send_email(to_email: str, subject: str, text_body: str, html_body: Optional[str] = None) -> None:
provider = settings.EMAIL_PROVIDER.lower().strip()
if provider == "sendgrid":
await _send_sendgrid(to_email, subject, text_body, html_body)
return
if provider == "ses":
await _send_ses(to_email, subject, text_body, html_body)
return
logger.info("Email (console) to=%s subject=%s body=%s", to_email, subject, text_body)
async def _send_sendgrid(to_email: str, subject: str, text_body: str, html_body: Optional[str]) -> None:
if not settings.SENDGRID_API_KEY:
logger.warning("SENDGRID_API_KEY missing; falling back to console email logging")
logger.info("Email (console) to=%s subject=%s body=%s", to_email, subject, text_body)
return
try:
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
except Exception:
logger.exception("SendGrid package unavailable; falling back to console logging")
logger.info("Email (console) to=%s subject=%s body=%s", to_email, subject, text_body)
return
message = Mail(
from_email=settings.EMAIL_FROM,
to_emails=to_email,
subject=subject,
plain_text_content=text_body,
html_content=html_body or text_body,
)
try:
client = SendGridAPIClient(settings.SENDGRID_API_KEY)
client.send(message)
except Exception:
logger.exception("SendGrid send failed")
async def _send_ses(to_email: str, subject: str, text_body: str, html_body: Optional[str]) -> None:
try:
import boto3
except Exception:
logger.exception("boto3 unavailable for SES; falling back to console logging")
logger.info("Email (console) to=%s subject=%s body=%s", to_email, subject, text_body)
return
if not settings.AWS_SES_REGION:
logger.warning("AWS_SES_REGION missing; falling back to console logging")
logger.info("Email (console) to=%s subject=%s body=%s", to_email, subject, text_body)
return
try:
client = boto3.client(
"ses",
region_name=settings.AWS_SES_REGION,
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
)
client.send_email(
Source=settings.EMAIL_FROM,
Destination={"ToAddresses": [to_email]},
Message={
"Subject": {"Data": subject},
"Body": {
"Text": {"Data": text_body},
"Html": {"Data": html_body or text_body},
},
},
)
except Exception:
logger.exception("SES send failed")