Fix campaign stuck on sending under async queue, and stop UUID ValidationError when SMTP2GO tests send "Headers Unavailable".
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""Shared context for branded HTML/text emails (public site palette)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import html
|
|
import re
|
|
|
|
from django.conf import settings
|
|
from django.contrib.staticfiles.storage import staticfiles_storage
|
|
|
|
|
|
_URL_RE = re.compile(r"(https?://[^\s<]+)")
|
|
|
|
|
|
def email_brand_context(**extra):
|
|
site_url = (getattr(settings, "PUBLIC_SITE_URL", None) or "").rstrip("/")
|
|
if not site_url:
|
|
site_url = "https://mkdrealtor.com"
|
|
|
|
logo_path = staticfiles_storage.url("brand/exit_logo.png")
|
|
if logo_path.startswith("http://") or logo_path.startswith("https://"):
|
|
logo_url = logo_path
|
|
else:
|
|
logo_url = f"{site_url}{logo_path}"
|
|
|
|
brand_name = getattr(settings, "SITE_NAME", None) or "Monica Dhillon"
|
|
brand_legal = getattr(settings, "CREDIT_NAME", None) or brand_name
|
|
tagline = getattr(settings, "SITE_TAGLINE", None) or ""
|
|
host_label = site_url.replace("https://", "").replace("http://", "")
|
|
|
|
return {
|
|
"site_url": site_url,
|
|
"logo_url": logo_url,
|
|
"brand_name": brand_name,
|
|
"brand_legal": brand_legal,
|
|
"brand_tagline": tagline,
|
|
"host_label": host_label,
|
|
**extra,
|
|
}
|
|
|
|
|
|
def plain_text_to_email_html(text: str) -> str:
|
|
"""Escape plain text and turn paragraphs / URLs into simple HTML."""
|
|
raw = (text or "").replace("\r\n", "\n").strip()
|
|
if not raw:
|
|
return ""
|
|
|
|
blocks: list[str] = []
|
|
for para in re.split(r"\n\s*\n", raw):
|
|
lines = [html.escape(line) for line in para.split("\n")]
|
|
joined = "<br>\n".join(lines)
|
|
joined = _URL_RE.sub(
|
|
r'<a href="\1" style="color:#00626c;text-decoration:underline;">\1</a>',
|
|
joined,
|
|
)
|
|
blocks.append(
|
|
f'<p style="margin:0 0 16px;color:#212121;font-size:15px;'
|
|
f'line-height:1.6;">{joined}</p>'
|
|
)
|
|
return "\n".join(blocks)
|