Mailshot

Email & SMS Campaign Management

Send personalised email and SMS campaigns from your Microsoft 365 mailbox. Upload recipients, merge fields, preview, send, and audit — all from one admin interface.

Microsoft 365 SMS Jinja2 Templates Audit Trail Encryption at Rest
1

Dashboard

Log in via Microsoft SSO and land on the admin dashboard. Every section — campaigns, templates, suppression lists, send logs — is accessible from the sidebar navigation.

Admin dashboard after login
2

Create Templates

Build reusable email and SMS templates with Jinja2 merge fields like {{ first_name }} and {{ company }}. Edit rich HTML content with TinyMCE, attach a theme for consistent branding, and manage opt-out links.

Template list
TinyMCE rich text editor
3

Build Campaigns

Create a campaign, choose your template and channel (email or SMS), then upload a CSV or XLSX recipient list. Columns are auto-detected and mapped to merge fields.

Campaign list with status badges
Campaign edit form
4

Preview Before Sending

Preview rendered emails for the first 5 recipients before sending. See exactly what each person will receive — merge fields populated, theme applied, opt-out link in place.

Rendered themed email previews
5

Send

Hit "Send Now" or schedule for later. Campaigns dispatch asynchronously via Celery with configurable rate limiting to protect against throttling. Track progress as messages go out.

Send Now success banner
All campaigns completed
6

Audit Trail

Every message is logged with delivery status, timestamps, and external message IDs. Filter and search the full audit trail for compliance reporting.

Send logs audit trail
7

Suppression List

Manage a do-not-contact list. Recipients can self-unsubscribe via unique opt-out links embedded in every marketing message. The suppression list is checked before every send.

Do-not-contact suppression list

Key Features

Microsoft 365 Integration

OAuth authentication and Graph API for sending email from real mailboxes with delegated permissions.

SMS Campaigns

Send SMS via the Real World SMS gateway. Same template and campaign workflow as email.

Jinja2 Templates

Sandboxed template engine with merge fields, whitelisted filters, and reusable HTML themes.

Multi-Tenant

Isolated Docker stacks per customer. Each tenant has its own database, config, and credentials.

Encryption at Rest

OAuth tokens and API keys encrypted with Fernet. Secrets never stored in plaintext.

Role-Based Access

Five permission groups — from view-only auditors to full administrators — with granular controls.

Rate Limiting

Configurable per-second throttling prevents API rate limit errors and protects recipient mailboxes.

Celery Task Queue

Asynchronous campaign dispatch with automatic retries, dead-letter handling, and progress tracking.