## 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)