Send branded HTML emails and harden SMTP2GO webhooks.
Fix campaign stuck on sending under async queue, and stop UUID ValidationError when SMTP2GO tests send "Headers Unavailable".
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user