Source code for schedula.utils.form.mail

# coding=utf-8
# -*- coding: UTF-8 -*-
#
# Copyright 2015-2024, Vincenzo Arcidiacono;
# Licensed under the EUPL (the 'Licence');
# You may not use this work except in compliance with the Licence.
# You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl

"""
It provides functions to send mails with Flask.
"""
import os
import rst2txt
import schedula as sh
from flask import render_template
from flask_mail import Message, Mail as _Mail
from docutils.core import publish_string
from flask_babel import get_locale


[docs] def prepare_message(boby, subject, recipients, reply_to=None, **kwargs): body = publish_string(boby, writer=rst2txt.Writer()).decode() html = publish_string(boby, writer_name='html').decode() return Message( body=body, html=html, subject=subject, recipients=recipients, reply_to=reply_to, **kwargs )
def _render_template(*paths, **data): from jinja2.exceptions import TemplateNotFound for path in paths: try: return render_template( path, **data ) except TemplateNotFound: continue raise TemplateNotFound
[docs] class Mail(_Mail):
[docs] def send_rst(self, to, rst=None, reply_to=None, body=None, subject=None, **data): from tabulate import tabulate language = get_locale().language body = body or _render_template( f'schedula/email/{rst}-body-{language}.rst', f'schedula/email/{rst}-body.rst', tabulate=tabulate, **data ) subject = subject or _render_template( f'schedula/email/{rst}-subject-{language}.rst', f'schedula/email/{rst}-subject.rst', tabulate=tabulate, **data ) recipients = list(sh.stlp(os.environ.get('LOCAL', to))) message = prepare_message(body, subject, recipients, reply_to=reply_to) return self.send(message)