Code source de geonature.utils.utilsmails

# Fonctions génériques permettant l'envoie de mails
import re
import logging

from smtplib import SMTPException
from flask import current_app
from flask_mail import Message

from geonature.utils.env import MAIL

[docs] log = logging.getLogger()
[docs] name_address_email_regex = re.compile(r"^([^<]+)<([^>]+)>$", re.IGNORECASE)
[docs] def send_mail(recipients, subject, msg_html): """Envoi d'un email à l'aide de Flask_mail. .. :quickref: Fonction générique d'envoi d'email. Parameters ---------- recipients : str or [str] Chaine contenant des emails séparés par des virgules ou liste contenant des emails. Un email encadré par des chevrons peut être précédé d'un libellé qui sera utilisé lors de l'envoi. subject : str Sujet de l'email. msg_html : str Contenu de l'eamil au format HTML. Returns ------- void L'email est envoyé. Aucun retour. """ with MAIL.connect() as conn: mail_sender = current_app.config.get("MAIL_DEFAULT_SENDER") if not mail_sender: mail_sender = current_app.config["MAIL_USERNAME"] msg = Message(subject, sender=mail_sender, recipients=clean_recipients(recipients)) msg.html = msg_html conn.send(msg)
[docs] def clean_recipients(recipients): """Retourne une liste contenant des emails (str) ou des tuples contenant un libelé et l'email correspondant. Parameters ---------- recipients : str or [str] Chaine contenant des emails séparés par des virgules ou liste contenant des emails. Un email encadré par des chevrons peut être précédé d'un libellé qui sera utilisé lors de l'envoi. Returns ------- [str or tuple] Liste contenant des chaines (email) ou des tuples (libellé, email). """ if type(recipients) is list and len(recipients) > 0: splited_recipients = recipients elif type(recipients) is str and recipients != "": splited_recipients = recipients.split(",") else: raise Exception("Recipients not set") trimed_recipients = list(map(str.strip, splited_recipients)) return list(map(split_name_address, trimed_recipients))
[docs] def split_name_address(email): """Sépare le libellé de l'email. Le libellé doit précéder l'email qui doit être encadré par des chevons. Format : `libellé <email>`. Ex. : `Carl von LINNÉ <c.linnaeus@linnaeus.se>`. Parameters ---------- email : str Chaine contenant un email avec ou sans libellé. Returns ------- str or tuple L'email simple ou un tuple contenant ("libellé", "email"). """ name_address = email match = name_address_email_regex.match(email) if match: name_address = (match.group(1).strip(), match.group(2).strip()) return name_address