Files
monica_site/site/messaging/tasks.py
T
westfarn d830f07757
Deploy Beta / unit-tests (push) Successful in 9s
Deploy Beta / docker (push) Successful in 15s
Deploy Beta / deploy-beta (push) Successful in 1m36s
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".
2026-08-09 06:37:20 -05:00

53 lines
1.6 KiB
Python

from django.tasks import task
from django.utils import timezone
from messaging.channels import dispatch_message
from messaging.models import Message
from messaging.services import contact_may_receive, refresh_campaign_status
@task
def send_campaign_message(message_id: str) -> None:
campaign = None
try:
message = Message.objects.select_related("contact", "campaign").get(
pk=message_id
)
except Message.DoesNotExist:
return
campaign = message.campaign
if not contact_may_receive(message.contact, message.channel):
message.status = Message.Status.SUPPRESSED
message.error = "Contact opted out or suppressed"
message.save(update_fields=["status", "error", "updated_at"])
refresh_campaign_status(campaign)
return
try:
result = dispatch_message(message)
message.status = Message.Status.SENT
message.provider = result.provider
message.provider_message_id = result.provider_id
message.sent_at = timezone.now()
message.error = ""
message.save(
update_fields=[
"status",
"provider",
"provider_message_id",
"sent_at",
"error",
"updated_at",
]
)
except Exception as exc: # noqa: BLE001 — persist provider failures
message.status = Message.Status.FAILED
message.error = str(exc)[:2000]
message.save(update_fields=["status", "error", "updated_at"])
refresh_campaign_status(campaign)
raise
refresh_campaign_status(campaign)