"""Construccion de EmailMessage Python con cuerpo HTML — funcion pura.""" from dataclasses import dataclass, field @dataclass(frozen=True) class EmailMessagePy: """Mensaje de email inmutable listo para enviar. Construir con email_build_html() o email_build_text(). """ from_addr: str to: tuple[str, ...] subject: str body_html: str = "" body_text: str = "" cc: tuple[str, ...] = field(default_factory=tuple) bcc: tuple[str, ...] = field(default_factory=tuple) headers: tuple[tuple[str, str], ...] = field(default_factory=tuple) def email_build_html( from_addr: str, to: list[str], subject: str, body_html: str, ) -> EmailMessagePy: """Construye un EmailMessagePy con cuerpo HTML. Funcion pura — no tiene efectos secundarios. El slice `to` se convierte a tupla para garantizar inmutabilidad. Args: from_addr: Direccion del remitente. to: Lista de destinatarios principales. subject: Asunto del correo. body_html: Contenido HTML del cuerpo del mensaje. Returns: EmailMessagePy inmutable con cuerpo HTML. body_text queda vacio. """ return EmailMessagePy( from_addr=from_addr, to=tuple(to), subject=subject, body_html=body_html, body_text="", )