from flask import Blueprint, request, redirect, url_for, flash, Response from typing import List from html import escape from modules.email.draft_handler import DraftHandler from modules.email.email_manager import EmailSender email_drafts_bp = Blueprint("email_drafts", __name__, url_prefix="/email/drafts") @email_drafts_bp.get("/") def list_drafts_page(): """ Page HTML minimaliste listant les brouillons avec bouton [Envoyer]. Pas de template Jinja requis (HTML inline pour simplicité d'intégration). """ handler = DraftHandler() drafts = handler.list_pending() def row_html(d): # Contenu HTML tel quel (on suppose content déjà HTML sûr) return f"""

{escape(d.subject)}

À: {escape(d.to_email)}
{d.content}
Prospect: {escape(d.prospect_id)} | Template: {escape(d.template_id or '-') }
""" items_html = "\n".join(row_html(d) for d in drafts) or "

Aucun brouillon à envoyer.

" page = f""" Brouillons d'emails

Brouillons d'emails à envoyer

{items_html}
""" return Response(page, mimetype="text/html") @email_drafts_bp.post("/send") def send_draft(): """ Envoi d'un brouillon sélectionné, puis mise à jour du statut. """ draft_id = (request.form.get("draft_id") or "").strip() if not draft_id: flash("Brouillon invalide", "warning") return redirect(url_for("email_drafts.list_drafts_page")) handler = DraftHandler() draft = handler.get_draft(draft_id) if not draft: flash("Brouillon introuvable", "danger") return redirect(url_for("email_drafts.list_drafts_page")) sender = EmailSender() try: res = sender.send_email(draft.to_email, draft.subject, draft.content) if res.get("success"): handler.mark_sent(draft.id, success=True) flash("Email envoyé.", "success") else: handler.mark_sent(draft.id, success=False, error_message=res.get("error")) flash("Échec de l'envoi de l'email.", "danger") except Exception as e: handler.mark_sent(draft.id, success=False, error_message=str(e)) flash("Erreur lors de l'envoi de l'email.", "danger") return redirect(url_for("email_drafts.list_drafts_page"))