From 5b53ef376d087f0c6a8ea418ae3c238f70cadf27 Mon Sep 17 00:00:00 2001 From: Ryan Westfall Date: Sun, 9 Aug 2026 06:54:20 -0500 Subject: [PATCH] Show SITE_NAME as the email From display name. Bare DEFAULT_FROM_EMAIL addresses were rendering as "noreply" in inboxes; wrap them as "Monica Dhillon"
. --- .env.example | 7 +++++++ .env.prod.example | 5 ++++- site/monica_site/settings/base.py | 26 +++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 52bee3d..e714ceb 100644 --- a/.env.example +++ b/.env.example @@ -26,10 +26,17 @@ RECAPTCHA_PRIVATE_KEY= # SMTP2GO — fill in `.env` (not this file). Dev defaults to console backend # until you set EMAIL_BACKEND to the SMTP backend below. EMAIL_HOST=mail.smtp2go.com +# SMTP login (not shown to recipients) EMAIL_HOST_USER= EMAIL_HOST_PASSWORD= EMAIL_PORT=2525 EMAIL_USE_TLS=true +# Inbox From header. Bare address → local-part shows as name ("noreply"). +# Prefer quoted display name (SITE_NAME is auto-wrapped if you omit it): +# DEFAULT_FROM_EMAIL=noreply@mkdrealtor.com +# → "Monica Dhillon" +# Or set explicitly (must be allowed/verified in SMTP2GO): +# DEFAULT_FROM_EMAIL="Monica Dhillon" DEFAULT_FROM_EMAIL=noreply@mkdrealtor.com # Console (default in DJANGO_ENV=dev) prints mail to container logs. # For real SMTP2GO delivery locally, uncomment: diff --git a/.env.prod.example b/.env.prod.example index fa7eaf5..cface3f 100644 --- a/.env.prod.example +++ b/.env.prod.example @@ -24,6 +24,9 @@ SITE_UNDER_CONSTRUCTION=true SITE_NAME=Monica Dhillon SITE_TAGLINE=MKDRealtor.com · EXIT Realty Redefined PUBLIC_SITE_URL=https://mkdrealtor.com +# Inbox From (display name auto-added from SITE_NAME if omitted). +# SMTP2GO must allow sending as this address. Example: +# DEFAULT_FROM_EMAIL="Monica Dhillon" DEFAULT_FROM_EMAIL=noreply@mkdrealtor.com CONTACT_PHONE= CONTACT_EMAIL= @@ -41,7 +44,7 @@ WEB_PORT=8004 RECAPTCHA_PUBLIC_KEY=replace-me RECAPTCHA_PRIVATE_KEY=replace-me -# SMTP2GO email +# SMTP2GO email — HOST_USER is SMTP auth only; From uses DEFAULT_FROM_EMAIL EMAIL_HOST=mail.smtp2go.com EMAIL_HOST_USER=replace-me EMAIL_HOST_PASSWORD=replace-me diff --git a/site/monica_site/settings/base.py b/site/monica_site/settings/base.py index 389a6d3..191f3b6 100644 --- a/site/monica_site/settings/base.py +++ b/site/monica_site/settings/base.py @@ -208,13 +208,37 @@ SITE_UNDER_CONSTRUCTION = env_bool("SITE_UNDER_CONSTRUCTION", False) SITE_NAME = env("SITE_NAME", "Monica Dhillon") SITE_TAGLINE = env("SITE_TAGLINE", "MKDRealtor.com · EXIT Realty Redefined") PUBLIC_SITE_URL = env("PUBLIC_SITE_URL", "") -DEFAULT_FROM_EMAIL = env("DEFAULT_FROM_EMAIL", "noreply@mkdrealtor.com") CONTACT_PHONE = env("CONTACT_PHONE", "(555) 123-4567") CONTACT_EMAIL = env("CONTACT_EMAIL", "monica@example.com") CONTACT_SERVICE_AREA = env("CONTACT_SERVICE_AREA", "Serving Greater Metro Area") CREDIT_NAME = env("CREDIT_NAME", "AI ML Operations, LLC") CREDIT_URL = env("CREDIT_URL", "https://aimloperations.com") + +def format_from_email(address: str | None, display_name: str | None = None) -> str: + """ + Ensure From header includes a display name for inbox UIs. + + Bare ``noreply@…`` shows as "noreply". Prefer + ``"Monica Dhillon" `` (RFC 5322). + """ + raw = (address or "").strip() + if not raw: + return "" + if "<" in raw and ">" in raw: + return raw + name = (display_name or SITE_NAME or "").strip() + if not name: + return raw + safe = name.replace("\\", "\\\\").replace('"', '\\"') + return f'"{safe}" <{raw}>' + + +# Inbox "From" — not the same as EMAIL_HOST_USER (SMTP login). +DEFAULT_FROM_EMAIL = format_from_email( + env("DEFAULT_FROM_EMAIL", "noreply@mkdrealtor.com") +) + # --- reCAPTCHA v3 --- RECAPTCHA_PUBLIC_KEY = env("RECAPTCHA_PUBLIC_KEY", "") RECAPTCHA_PRIVATE_KEY = env("RECAPTCHA_PRIVATE_KEY", "")