{% extends "portal_base.html" %} {% load static %} {% block title %}{{ campaign.name }} · Campaign{% endblock %} {% block topbar_title %}{{ campaign.name }}{% endblock %} {% block portal_content %}
{{ campaign.get_status_display }} {{ campaign.get_channel_display }} {% if campaign.scheduled_for %} Scheduled {{ campaign.scheduled_for|date:"M j, g:i A" }} {% endif %} Live · updates every 10s
← Campaigns
{% if campaign.channel == "email" or can_send %}

Send

{% if campaign.channel == "email" %}
{% csrf_token %}
Sends one [TEST] copy. Does not notify the recipient list.
{% endif %} {% if can_send %}
{% csrf_token %}

{% if campaign.channel == "postcard" %} Enqueues draft / scheduled / failed messages via PCM Integrations. {% else %} Enqueues draft / scheduled / failed messages via SMTP2GO (dev ImmediateBackend runs inline). {% endif %}

{% endif %}
{% endif %}

Tracked site link

{% include "core/_utm_link_panel.html" with utm_live=False utm_medium=campaign.channel utm_campaign_name=campaign.name %}
Messages
{{ stats.total }}
Sent
{{ stats.sent }}
Delivered
{{ stats.delivered }}
{% if campaign.channel == "email" %}
Opens
{{ stats.opens }}
Clicks
{{ stats.clicks }}
{% endif %}
Bounced / failed
{{ stats.failed }}
Suppressed
{{ stats.suppressed }}

Engagement

{% if campaign.channel == "email" %}

Unique recipients: {{ stats.opens }} opened · {{ stats.clicks }} clicked ({{ stats.open_events }} open events / {{ stats.click_events }} click events from SMTP2GO).

{% elif campaign.channel == "sms" %}

Delivery status updates from SMTP2GO SMS webhooks.

{% else %}

Postcard status updates from PCM Integrations webhooks.

{% endif %}

{{ events_title }}

{% for event in recent_events %} {% empty %} {% endfor %}
WhenEventContact
{{ event.created_at|date:"M j, g:i A" }} {{ event.event_type }} {% if event.message %}{{ event.message.contact }}{% else %}—{% endif %}
{{ events_empty|safe }}

Recipients

{{ page_obj.paginator.count }} total {% if page_obj.paginator.num_pages > 1 %} · page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }} {% endif %}
{% for message in recipient_messages %} {% empty %} {% endfor %}
ContactStatusProvider idError
{{ message.contact }}
{% if message.destination %}
{{ message.destination }}
{% endif %}
{{ message.get_status_display }} {{ message.provider_message_id|default:"—" }} {{ message.error|truncatechars:60|default:"—" }} {% if message.can_remove %}
{% csrf_token %}
{% else %} {% endif %}
No messages on this campaign.
{% if page_obj.paginator.num_pages > 1 %}
{% if page_obj.has_previous %} ← Prev {% endif %} Page {{ page_obj.number }} / {{ page_obj.paginator.num_pages }} {% if page_obj.has_next %} Next → {% endif %}
{% endif %}
{% endblock %} {% block extra_js %} {% endblock %}