February 2025 · POWERMTA TECHNICAL REFERENCE

PowerMTA and MailWizz Integration Configuration — SMTP Relay, Bounce Processing, and FBL Setup

February 2025 PowerMTA 6.x PowerMTA MailWizz Integration

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.

SMTP Setup

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-listener
Bounce 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 path
VERP 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 Log
FBL 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 blacklisted
FAQ

Frequently Asked Questions

How does MailWizz communicate with PowerMTA for message delivery? +
Should I install MailWizz and PowerMTA on the same server? +
What bounce server settings should I use in MailWizz for PowerMTA integration? +
How does VERP work in the PowerMTA-MailWizz integration? +
Section

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.

Need a Managed PowerMTA Environment?

Cloud Server for Email operates fully managed PowerMTA infrastructure from EU-based dedicated servers. Daily monitoring, per-ISP domain block optimization, IP warming management, and incident response included.

Need PowerMTA help?

Our engineers work with PowerMTA daily. Contact us for a technical consultation on your specific configuration challenge.