January 2026 · POWERMTA TECHNICAL REFERENCE

How to Install PowerMTA on CentOS 7, CentOS 8, and RHEL — Step-by-Step Guide

January 2026 PowerMTA 6.x Install PowerMTA CentOS

Installing PowerMTA on CentOS 7, CentOS 8, or RHEL requires correct system preparation before the software is installed. Skipping pre-installation steps — file descriptor limits, hostname setup, spool directory performance — produces operational problems that are harder to diagnose after the fact. This guide covers the complete installation sequence for a production-ready PowerMTA environment from a clean server.

Section 1

System Preparation Before Installation

Before installing PowerMTA, the server must have a valid reverse-resolvable hostname, sufficient system resources, and no conflicting SMTP service running on port 25.

# Set a hostname that resolves to your primary sending IP
hostnamectl set-hostname mail1.yourdomain.com

# Verify hostname resolves
hostname -f      # Should return: mail1.yourdomain.com

# Verify reverse DNS (PTR) points to this hostname
dig -x [YOUR_SENDING_IP]  # Should return: mail1.yourdomain.com.

# Update the system
yum update -y && yum install -y openssl perl-core net-tools  # CentOS 7
dnf update -y                                                  # CentOS 8

# Stop and disable conflicting mail services
systemctl stop sendmail postfix exim 2>/dev/null
systemctl disable sendmail postfix exim 2>/dev/null

# Verify port 25 is free
ss -tlnp | grep :25   # Should return nothing
Section 2

RPM Package Installation

PowerMTA is distributed as an RPM package provided by Port25 Solutions upon license purchase. Upload the RPM to your server and install it with yum (CentOS 7) or dnf (CentOS 8). The RPM installs all required components and registers a systemd service.

# Transfer RPM to server
scp powermta-6.x.x-1.el7.x86_64.rpm user@yourserver:/tmp/

# Install (CentOS 7)
rpm -ivh /tmp/powermta-6.x.x-1.el7.x86_64.rpm

# Install (CentOS 8 / RHEL 8)
dnf install /tmp/powermta-6.x.x-1.el8.x86_64.rpm

# Verify installation
rpm -qa | grep powermta

# Installed file locations:
# Binary:   /usr/sbin/pmta
# Config:   /etc/pmta/config
# License:  /etc/pmta/license  (place here before starting)
# Spool:    /var/spool/pmta
# Logs:     /var/log/pmta/

# Do NOT start the service yet — license and config must be set first
Section 3

License File Configuration

The PowerMTA license is tied to the MAC address of the server's primary network interface. Provide your MAC address to Port25 to receive the license file. Place it at /etc/pmta/license with correct ownership and permissions.

# Get MAC address for license request
ip link show eth0 | grep "link/ether"
# Returns: link/ether aa:bb:cc:dd:ee:ff

# Place license file at correct path
cat /etc/pmta/license
# Mac-Address: aa:bb:cc:dd:ee:ff
# Expiration: 2026-12-31
# Type: Enterprise

# Set permissions
chmod 640 /etc/pmta/license
chown root:pmta /etc/pmta/license

# Validate license
pmta check-license
# Output: License OK — valid through 2026-12-31

# Common errors:
# "MAC address mismatch" — wrong server, request new license
# "License expired" — renewal required from Port25
# "License not found" — wrong path or permissions
Section 4

Initial Configuration File

The default /etc/pmta/config installed by the RPM is a minimal stub. It must be configured before the service can handle production traffic. The minimum viable configuration defines a hostname, SMTP listener, spool path, logging, accounting, and at least one virtual MTA.

# /etc/pmta/config — minimal production starting point

hostname mail1.yourdomain.com

# Injection listener (from your application)
smtp-listener 127.0.0.1:25 {{
    allow-unencrypted-plain-auth yes
    default-virtual-mta default-mta
}}

spool-dir /var/spool/pmta   # Use SSD storage


    file /var/log/pmta/pmta.log
    size 50m
    rotate-period daily
    max-files 14



    path /var/log/pmta/accounting
    format csv
    records received,delivered,failed,deferred,bounced
    rotate-period daily
    max-files 30



    smtp-source-host 185.x.x.10 mail1.yourdomain.com
    dkim-sign domain="yourdomain.com" \
              key-file="/etc/pmta/dkim/yourdomain.private" \
              selector="s1"
Section 5

Starting and Verifying the Service

systemctl start pmta
systemctl enable pmta
systemctl status pmta
# Active: active (running) since...

pmta show status          # queue depth monitoring, active connections, msgs/sec
pmta show domain gmail.com   # Verify domain block loaded
pmta show queue           # Messages queued by domain
tail -50 /var/log/pmta/pmta.log  # Check for startup errors

# Test injection
echo "Subject: Test" | sendmail test@gmail.com
# Then: pmta show queue   — should show the message queued
Common startup failuresPort 25 already in use by sendmail/postfix (stop and disable it); license file permissions wrong (must be readable by pmta user); spool directory doesn't exist (mkdir -p /var/spool/pmta && chown pmta:pmta /var/spool/pmta).
Section 6

Firewall and Port 25 Configuration

# Open outbound port 25 (firewalld — CentOS 7/8)
firewall-cmd --permanent --add-port=25/tcp
firewall-cmd --reload

# Verify outbound port 25 is not blocked by your provider
telnet gmail-smtp-in.l.google.com 25
# Should respond: 220 mx.google.com ESMTP

# Cloud provider port 25 situations:
# AWS:   Request outbound port 25 removal via support ticket
# GCP:   Port 25 blocked by default — use GCP SMTP relay or request unblocking
# Azure: Requires support escalation to remove port 25 restriction
# Bare metal / colo: Typically open by default
Section 7

System Limits (ulimits) for Production

PowerMTA opens one file descriptor per active SMTP connection, plus additional descriptors for spool files and logs. The default Linux limit of 1024 is critically insufficient. Production environments need at minimum 65535.

# /etc/security/limits.conf
pmta    soft    nofile  65535
pmta    hard    nofile  65535
root    soft    nofile  65535
root    hard    nofile  65535

# systemd unit override
mkdir -p /etc/systemd/system/pmta.service.d/
cat > /etc/systemd/system/pmta.service.d/limits.conf << EOF
[Service]
LimitNOFILE=65535
EOF
systemctl daemon-reload && systemctl restart pmta

# Verify
cat /proc/$(pgrep pmta | head -1)/limits | grep "open files"
# Should show Max open files: 65535

# Kernel parameters for high-volume sending
cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 15
net.core.somaxconn = 65535
EOF
sysctl -p
FAQ

Frequently Asked Questions

What OS versions does PowerMTA officially support? +
Where is the PowerMTA license file on Linux? +
How do I check if PowerMTA is running correctly? +
What firewall ports does PowerMTA require? +
What file descriptor limit does PowerMTA require? +

Operating PowerMTA at production volume?

We manage PowerMTA environments for high-volume senders — configuration, IP warming schedule, daily reputation monitoring, and operational 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 support?

Our team works with PowerMTA daily. Contact us for a technical consultation on your specific configuration.