Skip to content

signup_email

send_fractal_email_or_log_failure(*, subject, msg, email_settings)

Send an email using the specified settings, or log about failure.

Source code in fractal_server/app/security/signup_email.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def send_fractal_email_or_log_failure(
    *,
    subject: str,
    msg: str,
    email_settings: PublicEmailSettings | None,
):
    """
    Send an email using the specified settings, or log about failure.
    """

    if email_settings is None:
        logger.error(
            f"Cannot send email with {subject=}, because {email_settings=}."
        )

    try:
        logger.info(f"START sending email with {subject=}.")
        mail_msg = EmailMessage()
        mail_msg.set_content(msg)
        mail_msg["From"] = formataddr(
            (email_settings.sender, email_settings.sender)
        )
        mail_msg["To"] = ", ".join(
            [
                formataddr((recipient, recipient))
                for recipient in email_settings.recipients
            ]
        )
        mail_msg[
            "Subject"
        ] = f"[Fractal, {email_settings.instance_name}] {subject}"
        with smtplib.SMTP(
            email_settings.smtp_server,
            email_settings.port,
        ) as server:
            server.ehlo()
            if email_settings.use_starttls:
                server.starttls()
                server.ehlo()
            if email_settings.use_login:
                server.login(
                    user=email_settings.sender,
                    password=email_settings.password.get_secret_value(),
                )
            server.sendmail(
                from_addr=email_settings.sender,
                to_addrs=email_settings.recipients,
                msg=mail_msg.as_string(),
            )
        logger.info(f"END sending email with {subject=}.")

    except Exception as e:
        logger.error(
            "Could not send self-registration email, "
            f"original error: {str(e)}."
        )