Skip to content
Snippets Groups Projects
mailer.py 1.13 KiB
Newer Older
"""The mailer service sends notification emails, as part of workflows that require interaction with external parties."""

import smtplib
from email.message import EmailMessage
from ssl import create_default_context

from gso.settings import load_oss_params


def send_mail(recipient: str, subject: str, body: str) -> None:
    """Send an email message to the given address.

    Only supports STARTTLS, not SSL.

    :param str recipient: The destination address.
    :param str subject: The email subject.
    :param str body: The contents of the email message.
    """
    email_params = load_oss_params().EMAIL
    msg = EmailMessage()
    msg["From"] = email_params.from_address
    msg["To"] = recipient
    msg["Subject"] = subject
    msg.set_content(body)

    with smtplib.SMTP(email_params.smtp_host, email_params.smtp_port) as s:
        if email_params.starttls_enabled:
            tls_context = create_default_context()
            s.starttls(context=tls_context)
        if email_params.smtp_username and email_params.smtp_password:
            s.login(email_params.smtp_username, email_params.smtp_password)
        s.send_message(msg)