import logging import re from email.header import Header from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from decouple import config from chalicelib.utils import smtp logger = logging.getLogger(__name__) def __get_html_from_file(source, formatting_variables): if formatting_variables is None: formatting_variables = {} formatting_variables["frontend_url"] = config("SITE_URL") with open(source, "r") as body: BODY_HTML = body.read() if formatting_variables is not None and len(formatting_variables.keys()) > 0: BODY_HTML = re.sub(r"%(?![(])", "%%", BODY_HTML) BODY_HTML = BODY_HTML % {**formatting_variables} return BODY_HTML def __replace_images(HTML): pattern_holder = re.compile(r'') return HTML, mime_img def send_html(BODY_HTML, SUBJECT, recipient): BODY_HTML, mime_img = __replace_images(BODY_HTML) if not isinstance(recipient, list): recipient = [recipient] msg = MIMEMultipart('related') msg['Subject'] = Header(SUBJECT, 'utf-8') msg['From'] = config("EMAIL_FROM") body = MIMEText(BODY_HTML, 'html', "utf-8") msg.attach(body) for m in mime_img: msg.attach(m) with smtp.SMTPClient() as s: for r in recipient: msg["To"] = r try: logger.info(f"Email sending to: {r}") s.send_message(msg) except Exception as e: logger.error("!!! Email error!") logger.error(e) def send_text(recipients, text, subject): with smtp.SMTPClient() as s: msg = MIMEMultipart() msg['Subject'] = Header(subject, 'utf-8') msg['From'] = config("EMAIL_FROM") msg['To'] = ", ".join(recipients) body = MIMEText(text) msg.attach(body) try: s.send_message(msg) except Exception as e: logger.error("!! Text-email failed: " + subject), logger.error(e) def __escape_text_html(text): return text.replace("@", "@").replace(".", ".").replace("=", "=")