MailWizz EMS · Installation guide · Updated 2026

How to install MailWizz

A real installation guide for MailWizz EMS in 2026: the server prerequisites that actually matter, the steps that are easy to miss, and the production-readiness checklist that separates a working install from a deliverable one.

Before you start: what you need

MailWizz EMS requires a Linux server with a LAMP-style stack, plus a license. The license is required — MailWizz is commercial software. You can purchase a license through the official MailWizz site or, if you want license plus configured hosting in one transaction, we sell licenses bundled with our MailWizz server plans.

Server requirements (current MailWizz 2.x)
  • PHP: 8.1 or 8.2 (PHP 7.4 still works for older 1.x branch but is end-of-life)
  • Database: MySQL 8.0+ or MariaDB 10.4+
  • Web server: Apache with mod_rewrite, or Nginx with PHP-FPM
  • RAM: 2 GB minimum, 4 GB recommended for production sending
  • Disk: 10 GB minimum, more if you store campaign archives
  • PHP extensions: mbstring, curl, openssl, mysqli, pdo_mysql, gd or imagick, zip, intl, fileinfo, dom, xml
  • Cron: Standard system cron (cPanel cron also works)
  • Sending capacity: SMTP delivery server (your own PowerMTA, hosted SMTP, or third-party API)

The PHP 8.x requirement is recent; if your hosting still defaults to PHP 7.4, switch the version in cPanel or contact your provider. Running MailWizz 2.x on PHP 7.4 will fail on installation.

Step 1 — Prepare the upload location

Decide whether MailWizz lives at the root of your domain (e.g. https://mailer.example.com/) or in a subdirectory (e.g. https://example.com/mailer/). Both work. The root option is cleaner if the domain is dedicated to email; the subdirectory option lets you reuse a domain that already runs other content.

If you are using cPanel, the document root is typically /home/username/public_html/. For root install, files go directly there. For subdirectory install, create a folder first: /home/username/public_html/mailer/.

Step 2 — Upload the application files

The MailWizz license download is a ZIP archive. Unzip it locally; you will see a folder called latest alongside other files. Upload the contents of the latest folder to your chosen install location — not the latest folder itself.

cPanel users can upload the entire ZIP to the server, then use cPanel File Manager's "Extract" feature to decompress it in place — faster than transferring thousands of small files over FTP. Direct SSH users can scp the archive and run unzip mailwizz.zip, then move the contents.

After upload, set ownership and permissions. Files should be owned by your web server user (commonly www-data on Debian/Ubuntu, the user account on cPanel servers). Standard permissions are 644 for files and 755 for directories. The MailWizz installer will tell you if specific subdirectories need to be writable.

Step 3 — Run the web installer

Open a browser and navigate to https://yourdomain.com/install/index.php (root install) or https://yourdomain.com/mailer/install/index.php (subdirectory install).

The installer walks through requirement checks (showing red ❌ for anything missing — common culprits are missing PHP extensions or wrong directory permissions), then prompts for database connection details and an admin account. Database credentials need to be created in advance via cPanel MySQL or your hosting control panel. The installer does not create the database itself, only the schema inside it.

When the installer reports success, you are not done. Two more steps are mandatory.

Step 4 — Remove the install directory

Delete the install/ folder from the server. Leaving it in place is a security risk: anyone who finds the URL could re-run the installer and overwrite your configuration. MailWizz will warn you about this in the admin panel until the folder is gone.

Via cPanel: File Manager → navigate to install → right-click → Delete. Via SSH: rm -rf /home/username/public_html/install (or the equivalent path).

Step 5 — Access the backend

The admin URL is https://yourdomain.com/backend. Log in with the admin account you created during installation. From here you configure delivery servers, sending domains, lists, campaigns, and the dozens of other settings MailWizz exposes.

A second URL, https://yourdomain.com/customer, is the customer panel where end-users (your clients, if you operate as an agency) log in. Most installations only use the backend URL; the customer panel matters when you have multi-tenant accounts.

Step 6 — Configure the cron jobs

This is the single most important step that installations get wrong. MailWizz runs almost everything through cron: campaign sending, bounce processing, list cleanup, statistics aggregation. Without cron jobs configured, the application appears to work in the admin UI but never sends mail.

The exact list of cron entries is shown in Backend > Miscellaneous > Cron Jobs List. Copy them into your server's crontab (cPanel: Cron Jobs; direct SSH: crontab -e). A typical MailWizz cron table looks like this:

# MailWizz EMS cron jobs (example)
*/2 * * * * /usr/bin/php /home/username/public_html/apps/console/console.php send-campaigns >/dev/null 2>&1
*/5 * * * * /usr/bin/php /home/username/public_html/apps/console/console.php send-transactional-emails >/dev/null 2>&1
*/10 * * * * /usr/bin/php /home/username/public_html/apps/console/console.php bounce-handler >/dev/null 2>&1
*/10 * * * * /usr/bin/php /home/username/public_html/apps/console/console.php feedback-loop-handler >/dev/null 2>&1
0 * * * * /usr/bin/php /home/username/public_html/apps/console/console.php hourly >/dev/null 2>&1
0 0 * * * /usr/bin/php /home/username/public_html/apps/console/console.php daily >/dev/null 2>&1

The exact paths and PHP binary location depend on your environment — cPanel typically uses /usr/local/bin/php, plain Ubuntu uses /usr/bin/php. Wrong PHP path is the second most common reason cron jobs silently fail. Verify with which php at the command line.

Run one cron command manually after configuring to verify it executes without error: drop the >/dev/null 2>&1 redirection so you see the output. If you see PHP errors, fix them before relying on the cron schedule.

Step 7 — Add a delivery server

MailWizz does not deliver mail itself. It hands messages to a delivery server, which performs the SMTP transaction with the recipient. Without a delivery server configured, even with cron running, no campaigns will send.

Backend > Servers > Delivery Servers > Add new server. The relevant options:

  • SMTP — PowerMTA. Recommended for high volume. PowerMTA listens on localhost or a remote IP, accepts authenticated SMTP submissions from MailWizz, handles all per-ISP throttling and authentication. Throughput at scale is several orders of magnitude higher than vanilla SMTP.
  • SMTP — generic. Connect to any SMTP server (Gmail, Office 365 SMTP, an external mail relay, etc). Works for low volume; rate limits at the SMTP server become bottlenecks for high-volume sending.
  • SMTP — Amazon SES, SendGrid, Mailgun, SparkPost. MailWizz integrates with most third-party APIs natively; you provide credentials and MailWizz handles the API mechanics.
  • PHP mail() / sendmail. Included for completeness. Do not use for any production sending. Reputation cannot be controlled, throughput is poor, deliverability is bad.

After adding the server, MailWizz prompts you to send a test message. Do that. If the test fails, the production campaign will fail too — debug the credentials and SMTP authentication before going further.

Production readiness checklist

An installation that completed without errors is not the same as an installation that will produce inbox-rate sends at scale. Before launching to a real list:

  • SPF, DKIM, DMARC published for the sending domain. SPF must include the sending IP. DKIM must be configured at the delivery server (PowerMTA signs messages; SES signs messages on its side). DMARC starts at p=none.
  • Bounce handler configured at the delivery server level (PowerMTA bounce-mail-from address) and the bounce-handler cron job confirmed running.
  • Feedback loop subscriptions with major ISPs (Yahoo CFL, Microsoft JMRP) configured, with the addresses pointed at the MailWizz feedback-loop endpoint. The feedback-loop-handler cron job processes them.
  • List-Unsubscribe header enabled in MailWizz campaign defaults. RFC 8058 one-click is mandatory for senders >5,000/day to Gmail and Yahoo as of February 2024. See our guide.
  • Suppression list pre-populated with prior bounce data if migrating from another platform. Sending to addresses that bounced on your previous platform will damage reputation immediately.
  • IP warming plan if using a new dedicated IP. Full production volume from a cold IP gets you blocked. See IP warming guide.
  • HTTPS / SSL certificate on the MailWizz URL. Open tracking pixels and click tracking embed URLs back to your MailWizz install; if those URLs are HTTP, modern email clients will block them as mixed content.
  • Backup configured for the database and the application directory. Daily database dump rotated 7 days, with a weekly archive kept for 4 weeks, is a workable minimum.

When self-installation is not the right answer

The seven steps above describe what a clean MailWizz install looks like. They do not describe everything that goes wrong on the way: PHP version mismatches, MySQL collation conflicts, web server configurations that block long-running cron jobs at fastcgi timeout, mod_security rules that block the install URL, server resource limits that stall campaign sending mid-run, and a dozen other failure modes that depend on your specific environment.

If your team's time is more valuable than the cost of managed hosting, our MailWizz managed plans include the complete installation, license, server, PowerMTA delivery configuration, SPF/DKIM/DMARC setup, IP warming, and ongoing monitoring — the production-readiness checklist above is the deliverable, not the homework.

Want MailWizz installed and configured for you?

License + server + PowerMTA delivery + SPF/DKIM/DMARC + IP warming + ongoing monitoring. Production-ready in 3–5 days, on EU-jurisdiction infrastructure.