59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import smtplib
|
|
from email.message import EmailMessage
|
|
|
|
from .config import Config
|
|
|
|
|
|
def _send_message(config: Config, message: EmailMessage) -> None:
|
|
smtp_class = smtplib.SMTP_SSL if config.smtp_ssl else smtplib.SMTP
|
|
with smtp_class(config.smtp_host, config.smtp_port, timeout=20) as smtp:
|
|
if config.smtp_starttls and not config.smtp_ssl:
|
|
smtp.starttls()
|
|
if config.smtp_username:
|
|
smtp.login(config.smtp_username, config.smtp_password)
|
|
smtp.send_message(message)
|
|
|
|
|
|
def send_verification_email(config: Config, to_email: str, verify_url: str) -> None:
|
|
message = EmailMessage()
|
|
message["From"] = config.smtp_from
|
|
message["To"] = to_email
|
|
message["Subject"] = "Verify your Sticknife account"
|
|
message.set_content(
|
|
"\n".join(
|
|
[
|
|
"Welcome to Sticknife.",
|
|
"",
|
|
"Verify your email address to continue:",
|
|
verify_url,
|
|
"",
|
|
"If you did not request this, you can ignore this email.",
|
|
]
|
|
)
|
|
)
|
|
|
|
_send_message(config, message)
|
|
|
|
|
|
|
|
def send_password_reset_email(config: Config, to_email: str, reset_url: str) -> None:
|
|
message = EmailMessage()
|
|
message["From"] = config.smtp_from
|
|
message["To"] = to_email
|
|
message["Subject"] = "Set your Sticknife password"
|
|
message.set_content(
|
|
"\n".join(
|
|
[
|
|
"Your Sticknife account is ready.",
|
|
"",
|
|
"Set or reset your password here:",
|
|
reset_url,
|
|
"",
|
|
"This link expires soon. If you did not request this, you can ignore this email.",
|
|
]
|
|
)
|
|
)
|
|
_send_message(config, message)
|