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