33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
## Copyright © 2026 Olaf Kolkman
|
|
## SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from email.message import EmailMessage
|
|
from smtplib import SMTP
|
|
|
|
from backend.app.core.config import settings
|
|
|
|
|
|
def smtp_configured() -> bool:
|
|
return bool(settings.smtp_host and settings.smtp_from)
|
|
|
|
|
|
def send_verification_email(email: str, username: str, verification_url: str) -> None:
|
|
if not smtp_configured():
|
|
raise RuntimeError('SMTP is not configured; set LINKLOG_SMTP_HOST and LINKLOG_SMTP_FROM')
|
|
|
|
message = EmailMessage()
|
|
message['Subject'] = 'Verify your LinkLog email address'
|
|
message['From'] = settings.smtp_from
|
|
message['To'] = email
|
|
message.set_content(
|
|
f'Hello {username},\n\n'
|
|
f'Verify your LinkLog email address by opening this link:\n{verification_url}\n\n'
|
|
f'This link expires in {settings.email_verification_expiry_hours} hours.\n'
|
|
)
|
|
|
|
with SMTP(settings.smtp_host, settings.smtp_port, timeout=10) as smtp:
|
|
if settings.smtp_use_tls:
|
|
smtp.starttls()
|
|
if settings.smtp_username:
|
|
smtp.login(settings.smtp_username, settings.smtp_password)
|
|
smtp.send_message(message) |