""" mail.py — Asynkron mail-sending via aiosmtplib. I udvikling bruges MailHog som SMTP-server. """ import asyncio import secrets from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import aiosmtplib from app.core.config import settings def generate_verify_token() -> str: return secrets.token_urlsafe(32) async def send_verification_email(email: str, username: str, token: str): verify_url = f"{settings.BASE_URL}/auth/verify/{token}" msg = MIMEMultipart("alternative") msg["Subject"] = "Bekræft din LineDance-konto" msg["From"] = settings.MAIL_FROM msg["To"] = email text = f"""Hej {username}, Tak for at oprette en konto på LineDance Player. Klik på linket nedenfor for at bekræfte din e-mailadresse: {verify_url} Linket udløber ikke — men kontoen er ikke aktiv før du har bekræftet. Hilsen LineDance Player """ html = f"""

Velkommen til LineDance Player, {username}!

Klik på knappen nedenfor for at bekræfte din e-mailadresse:

Bekræft e-mail

Eller kopier dette link:
{verify_url}

Linket udløber ikke.

""" msg.attach(MIMEText(text, "plain", "utf-8")) msg.attach(MIMEText(html, "html", "utf-8")) try: await aiosmtplib.send( msg, hostname=settings.MAIL_HOST, port=settings.MAIL_PORT, username=settings.MAIL_USERNAME or None, password=settings.MAIL_PASSWORD or None, start_tls=settings.MAIL_TLS, # STARTTLS på port 587 use_tls=False, ) except Exception as e: print(f"Mail-fejl: {e}") raise # Vis fejlen i serverlogs async def send_share_invitation(email: str, owner_name: str, playlist_name: str, permission: str, accept_url: str): perm_text = {"view": "se", "copy": "kopiere", "edit": "redigere"}.get(permission, "se") msg = MIMEMultipart("alternative") msg["Subject"] = f"{owner_name} har delt en danseliste med dig" msg["From"] = settings.MAIL_FROM msg["To"] = email html = f"""

Du er inviteret!

{owner_name} har delt danselisten {playlist_name} med dig.

Du har fået adgang til at {perm_text} listen.

Se danseliste

""" msg.attach(MIMEText(html, "html", "utf-8")) try: await aiosmtplib.send( msg, hostname=settings.MAIL_HOST, port=settings.MAIL_PORT, use_tls=settings.MAIL_TLS, ) except Exception as e: print(f"Mail-fejl (share): {e}")