PowerMTA and MailWizz are commonly deployed together — MailWizz handles campaign management, list management, and subscriber tracking, while PowerMTA handles the actual SMTP delivery. Configuring the integration correctly requires setting up the SMTP delivery server in MailWizz, configuring bounce and FBL processing, and ensuring VERP-based bounce tracking flows correctly between the two systems.
Contents
MailWizz Delivery Server Configuration
# MailWizz Delivery Server Configuration (MailWizz Admin Panel) # Backend → Delivery Servers → Add New Delivery Server # Server type: SMTP # Hostname: localhost (or PowerMTA server IP if separate) # Port: 25 (local) or 2525 (custom injection port) # Username: [empty for local auth] or SMTP auth credentials # Password: [empty for local auth] # From Email: campaigns@yourdomain.com # From Name: Your Company Name # Reply-To: replies@yourdomain.com # Max connections: 10 (controls MailWizz parallel sending) # If PowerMTA is on the same server: # Use localhost:25 with no authentication # Fastest path — no network overhead # If PowerMTA is on separate server: # Use PowerMTA's SMTP listener IP:587 with authentication # Configure TLS certificate on PowerMTA smtp-listenerBounce Processing
Bounce Server Configuration in MailWizz
# MailWizz handles bounce processing through a dedicated bounce email address # PowerMTA delivers to this address via VERP (Variable Envelope Return Path) # VERP in PowerMTA — encode recipient in Return-Path for bounce tracking # PowerMTA automatically encodes VERP when MailWizz uses encoded Return-Path # MailWizz generates Return-Path like: bounce+[campaign_id]+[subscriber_id]@yourdomain.com # In MailWizz Admin Panel: # Backend → Bounce Servers → Add New Bounce Server # Server type: pop3 / imap # Hostname: mail.yourdomain.com # Port: 993 (IMAP SSL) or 995 (POP3 SSL) # Username: bounce@yourdomain.com # Password: [mailbox password] # Service: imap (preferred) # Delete all messages: Yes (process and delete after reading) # Override the default From header: No # PowerMTA accounting log format to MailWizz: # MailWizz can also read PowerMTA accounting logs directly # Configure accounting log path in MailWizz (if on same server) # Backend → Delivery Servers → your delivery server → Accounting log pathVERP Setup
VERP Configuration for Accurate Bounce Attribution
# VERP (Variable Envelope Return Path) encodes the recipient address # into the Return-Path so bounces can be attributed to specific subscribers # MailWizz VERP configuration (Backend → Settings → Campaigns) # Force "From" header: Yes # Bounce category handling: automatic (MailWizz parses bounce categories) # PowerMTA passes Return-Path from application to destination servers # MailWizz sets Return-Path to: bounce+[encoded_info]@yourdomain.com # PowerMTA delivers as-is; bounce replies come to bounce@yourdomain.com # MailWizz polls bounce mailbox and processes based on encoded info in Return-Path # Alternative: PowerMTA accounting log bounce processing # Configure MailWizz to read PowerMTA accounting logs for bounce data # More reliable than mailbox polling for high-volume bounce processing # Set in: Backend → Delivery Servers → (select server) → Bounce Server LogFBL Integration
FBL Integration with MailWizz and PowerMTA
# FBL complaints must reach MailWizz to trigger automatic unsubscribes # PowerMTA receives FBL reports → process → update MailWizz blacklist detection and delisting # Option 1: Direct MailWizz blacklist API call #!/usr/bin/env python3 # Process FBL report and add to MailWizz blacklist import requests def blacklist_email(email, api_key, mailwizz_url): response = requests.post( f'{mailwizz_url}/api/blacklists', headers={'X-MW-PUBLIC-KEY': api_key}, json={'email': email, 'reason': 'fbl-complaint'} ) return response.status_code == 201 # Option 2: Process via email pipe # Configure FBL delivery to mailbox → MailWizz polls mailbox # Less real-time but simpler configuration # Option 3: Direct database write to MailWizz blacklist table # mysql mailwizz_db -e "INSERT IGNORE INTO mw_email_blacklist # (email_hash, email, reason) # VALUES (MD5('$EMAIL'), '$EMAIL', 'FBL complaint')" # Test FBL processing # Send test message to seed address, mark as spam, verify MailWizz shows as blacklistedFAQ
Frequently Asked Questions
Optimizing MailWizz-to-PowerMTA Injection
MailWizz injects messages to PowerMTA via SMTP. Configure the MailWizz delivery server to connect to PowerMTA's injection listener at 127.0.0.1:25 (or 127.0.0.1:2525 for a dedicated injection port). Set MailWizz's per-campaign send rate to match PowerMTA's ability to process and queue messages — injecting faster than PowerMTA can process creates application-side queue pressure. Monitor PowerMTA's queue depth monitoring during MailWizz campaign sends to verify steady-state processing is keeping pace with injection rate.
Operating PowerMTA at production scale?
We manage PowerMTA environments for high-volume senders — configuration, IP warming schedule, daily reputation monitoring, and incident response. Fully managed, no self-service.

