Send branded HTML emails and harden SMTP2GO webhooks.
Deploy Beta / unit-tests (push) Successful in 9s
Deploy Beta / docker (push) Successful in 15s
Deploy Beta / deploy-beta (push) Successful in 1m36s

Fix campaign stuck on sending under async queue, and stop UUID ValidationError when SMTP2GO tests send "Headers Unavailable".
This commit is contained in:
2026-08-09 06:37:20 -05:00
parent 617bda3e8b
commit d830f07757
16 changed files with 558 additions and 63 deletions
+13 -1
View File
@@ -1,5 +1,6 @@
import hashlib
import hmac
import logging
from django.conf import settings
from django.contrib import messages
@@ -38,6 +39,8 @@ from messaging.webhooks import (
process_smtp2go_sms_webhook,
)
logger = logging.getLogger(__name__)
def _audience_choices() -> list[tuple[str, str]]:
"""Labeled audience options with live opted-in counts."""
@@ -256,6 +259,11 @@ def campaign_detail(request, pk):
def campaign_status_json(request, pk):
"""JSON snapshot for live-updating the campaign report page."""
campaign = get_object_or_404(Campaign, pk=pk)
# Async queue may finish after enqueue; re-evaluate completion on poll.
from messaging.services import refresh_campaign_status
refresh_campaign_status(campaign)
campaign.refresh_from_db()
ctx = _campaign_report(campaign)
return JsonResponse(
{
@@ -580,7 +588,11 @@ def email_webhook(request):
):
return HttpResponseForbidden("invalid webhook token")
payload = parse_webhook_payload(request)
event = process_smtp2go_email_webhook(payload)
try:
event = process_smtp2go_email_webhook(payload)
except Exception: # noqa: BLE001 — never 500 SMTP2GO (they retry for 48h)
logger.exception("SMTP2GO email webhook processing failed")
return JsonResponse({"ok": False, "error": "processing_failed"}, status=200)
return JsonResponse(
{
"ok": True,