import logging
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
logger = logging.getLogger("ovh_factures.fetcher")
def _as_header(value) -> str:
# Convertit en chaîne pour les en-têtes MIME; join pour listes/tuples.
if isinstance(value, (list, tuple, set)):
return ", ".join(map(str, value))
return str(value)
def _as_rcpt_list(value):
# Liste de destinataires pour SMTP
if value is None:
return []
if isinstance(value, (list, tuple, set)):
return [str(v) for v in value]
return [str(value)]
def construct_html(bills: list[tuple[str, str]]) -> str:
try:
rows = [
f"
Facture n°{b} — "
f"émise le {d}"
for b, d in bills
]
return f"""
Nouvelle(s) facture(s)
Vous avez reçu {len(bills)} nouvelle(s) facture(s)
"""
except Exception as e:
logger.exception("Erreur dans construct_html", e)
return ""
def send_email(
subject,
content,
email_from,
email_password,
smtp_mail_address,
smpt_port,
email_to,
on_error=None,
):
try:
msg = MIMEMultipart()
msg["From"] = _as_header(email_from)
msg["To"] = _as_header(email_to)
msg["Subject"] = _as_header(subject)
msg.attach(MIMEText(str(content), "html"))
rcpts = _as_rcpt_list(email_to)
with smtplib.SMTP(smtp_mail_address, smpt_port) as server:
server.starttls()
server.login(str(email_from), str(email_password))
server.sendmail(str(email_from), rcpts, msg.as_string())
except Exception as e:
logger.exception("Erreur dans send_email")
if on_error:
on_error(e)