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)}."
)
|