Marketing automation. Replaces Mailchimp / HubSpot Marketing / ActiveCampaign. Lead capture forms, drip campaigns, segmentation, landing pages, A/B testing, analytics. Pair with Postal for outbound SMTP.
| Field | Value |
|---|---|
| Containers | ${CONTAINER_PREFIX}mautic (web + worker + cron) |
| Image | mautic/mautic |
| Internal port | 80 |
| External port | ${MAUTIC_PORT} (default 8091) |
| Database | MariaDB |
| Storage | mautic-data + mautic-mariadb-data |
| Backup type | database + volume |
| Classification | enterprise |
| Profiles | enterprise, full |
| Default SSO | oauth |
| SMTP backend | Postal (when bundled) |
| Recipe | What it does |
|---|---|
just mautic-status / -logs / -restart |
Lifecycle |
just mautic-mysql [ARGS] |
DB shell |
just mautic-console ARGS |
Symfony console (Mautic is Symfony) |
just mautic-list-users |
List users |
just mautic-create-user --email=… |
Create user |
just mautic-cron-run |
Manually trigger cron tasks (campaign processing, segment updates) |
Mautic UI → Components → Forms → + New
- Type: Campaign Form
- Fields: Email, Name, (custom)
- Actions: Add contact to segment "Newsletter"
- Embed code → copy into your website
The form submits to Mautic; new submissions become Contacts in the
Newsletter segment.
Mautic UI → Components → Campaigns → + New
- Trigger: Contact joins Newsletter segment
- Step 1: Send Email "Welcome" (use a template)
- Wait: 3 days
- Step 2: Send Email "Why X matters"
- Wait: 4 days
- Step 3: Send Email "Get started"
- Branch: If "Email opened", continue; else send re-engagement
Mautic UI → Configuration → Email Settings
- Service to send mail through: Other SMTP server
- Server: <container-prefix>postal-smtp
- Port: 25
- Auth Mode: Plain
- User Name + Password: from Postal admin
- Encryption: None (inside Docker network) — use TLS over public network
Embed the Mautic tracking pixel on your site:
<script src="https://${MAUTIC_URL}/mtc.js"></script>
Page visits, form interactions, click-through rates become visible per-contact
in Mautic → Contacts → individual contact page.
Mailchimp → Audience → Export. Mautic has a Mailchimp importer in
the marketplace (or use CSV import via Contacts → Import). See
/pma/cookbook/migrate-from-cloud-saas.
sso.type: oauthjust sso-check mautic
just sso-fix mautic
Mautic users authenticate via Authentik; role mapping needs explicit setup in
Mautic → Roles (admin role for marketing managers, restricted role for
agents).
Cron is non-optional. Mautic's campaign processing, segment updates,
email queue all run via cron. Without cron, campaigns never advance,
segments don't refresh, queued emails don't send. The mautic-cron
container handles this.
Symfony — heavyweight + slow first boot. First boot includes Symfony
cache warming + asset compilation. Can take 5+ minutes. Don't restart
mid-boot.
Templates are Twig. Email templates use Symfony's Twig syntax. The UI
has a WYSIWYG editor but power users edit Twig directly. Templates live in
the DB; export via just mautic-console mautic:assets:export.
Storage grows with email tracking. Every email open + click is logged
per contact. Mautic DB grows ~1 MB per 1000 emails sent. Plan accordingly.
GDPR / deliverability matters. Mautic supports double opt-in,
unsubscribe links, suppression lists. ENABLE these — single opt-in
campaigns get marked as spam fast and tank your domain reputation.
Postal + Mautic together is the magic combo. Mautic queues + tracks
the campaigns; Postal handles the actual SMTP delivery with proper
DKIM/SPF/DMARC. Neither alone is as effective as both together.
| Symptom | First check |
|---|---|
| Campaign stalled mid-flow | Cron not running; just status mautic |
| Emails queued but not sent | SMTP config + Postal queue |
| Tracking pixel returns 404 | Mautic URL / cors / CSP misconfigured |
| Login fails after Authentik change | just sso-check mautic |
| Slow contact list views | DB indexing; mautic-mysql, ANALYZE TABLE leads |
/pma/services/postal — the SMTP backend Mautic depends on./pma/cookbook/migrate-from-cloud-saas — Mailchimp → Mautic walkthrough.