Technical questions about PowerMTA configuration, IP pool management, delivery throttling, bounce processing, and reputation management in high-volume email environments. Written for engineers operating production PowerMTA deployments.
Questions about PowerMTA server setup, license configuration, initial deployment on Linux, and prerequisite system requirements for production environments.
ulimit -n should be set to 65535 or higher, configured in /etc/security/limits.conf and reflected in the systemd service file if running PowerMTA as a systemd service.virtual-mta blocks in the main configuration file (config.conf). Each virtual-mta defines a name, a source IP address (or address range), and optionally a specific sending domain. The virtual-mta-pool directive groups multiple virtual-MTA definitions for round-robin or other distribution strategies. Source IP selection per destination domain is controlled through domain blocks, where the route and virtual-mta-pool directives map specific destination domains to specific IP pools. For example, all Gmail-destined traffic can be routed through a Gmail-specific virtual-mta-pool, while Outlook traffic routes through a separate pool with different connection limits. This per-domain routing is the mechanism for ISP-specific traffic isolation at the MTA layer.dkim-sign directive within domain blocks or within virtual-mta blocks for domain-specific key assignment. Each dkim-sign directive specifies the key file path, signing domain, selector, and canonicalization method. For multi-domain environments, the recommended approach is a directory-based key structure (e.g., /etc/powermta/dkim/domain.com/selector.pem) with PowerMTA configuration referencing the selector and domain dynamically. Key rotation without delivery interruption follows a specific sequence: (1) generate the new key pair, (2) publish the new public key in DNS under a new selector while leaving the old selector active, (3) update PowerMTA configuration to sign with the new key, (4) verify signing with the new key using a test message and DKIM header inspection, (5) remove the old DNS selector record after the DNS TTL has expired. Attempting to remove the old DNS record before TTL expiry will cause DKIM validation failures for messages in transit that were signed with the old key.bounce-processor configuration and the bounce pattern database. Inbound bounce messages are received by PowerMTA's built-in SMTP listener (configured via the smtp-listener block for bounce reception) and classified against PowerMTA's pattern matching engine. Hard bounces (permanent failures — 5xx response codes indicating invalid address, domain does not exist, mailbox does not accept mail) trigger immediate suppression of the recipient address through the unsubscribe mechanism. Soft bounces (temporary failures that exceeded maximum retry age) are classified separately. The bounce pattern database (bounce-patterns.conf or the built-in pattern set) maps specific response text patterns to bounce categories. Custom bounce patterns can be added for ISP-specific bounce message formats not covered by the default database. Bounce data can be written to a log file or piped to an external processing script via the bounce-pipe directive for integration with list management systems.Technical configuration questions about connection management, throughput optimization, per-ISP throttling, and queue behavior in high-volume PowerMTA environments.
domain blocks using the max-smtp-out directive (maximum simultaneous outbound SMTP connections to that domain) and the smtp-pattern-list directive for response-adaptive throttling. For Gmail, production deployments typically use 5–15 simultaneous connections per IP, with the exact value determined by monitoring deferral rate response. Microsoft Outlook requires more conservative limits — 3–8 connections per IP — and is more likely to apply connection-level rate limits that PowerMTA must respect via the max-msg-rate directive. The max-conn-rate directive controls connection establishment rate (connections per second) separately from the concurrent connection count. For new IP addresses in warming, both max-smtp-out and max-conn-rate should be set to conservative values and adjusted upward as warming progresses and deferral rates confirm ISP acceptance. The retry-after directive controls the minimum delay before a new connection attempt following a deferral for a specific recipient domain.domain blocks: retry-after (minimum time before the first retry following a temporary failure), max-smtp-retries (maximum number of delivery attempts before classifying as a permanent failure), and expire-after (maximum age of a message in the delivery queue before generating a bounce). For minimizing retry pressure at Gmail and Microsoft, recommended conservative values are: retry-after 15m (fifteen minute minimum between retries — the PowerMTA default of 10 minutes is too aggressive for high-volume operations), exponential backoff via retry-multiplier (not a standard PowerMTA directive — this is achieved through custom retry-after schedules or via the pmta-accounting pipe to an external controller), and expire-after 2d (two day maximum queue age, reducing to four to eight hours for time-sensitive campaigns). The hold-domain directive allows an operator to manually pause delivery to a specific domain — this is the manual intervention mechanism for situations where automated retry logic is producing adverse signals and delivery needs to be paused while the cause is investigated.acct-file and acct-smtp-file directives, with field selection controlled by the acct-smtp-format or custom pipe format. For a complete per-message delivery analysis suitable for ISP response tracking and deliverability monitoring, the accounting record should include: etype (event type — delivery, bounce, or transient failure), orig (message ID), bounceCat (bounce category classification), dsnStatus (DSN status code — the three-part X.Y.Z code from the RFC 3463 response), dsnDiag (full ISP diagnostic message text — critical for identifying novel deferral codes), vmtaName (the virtual-MTA used, which identifies the source IP), destDomain (destination domain), dlvSourceIp (actual source IP used for the delivery attempt), and timestamps for both message receipt and delivery event. The dsnDiag field is the most operationally important — it contains the full text of the ISP response that determines whether a deferral is a simple rate limit or a reputation-related signal requiring review.smtp-source-host directive accepts both IPv4 and IPv6 address formats. However, mixed IPv4/IPv6 pools require careful design because ISPs treat IPv6 sender reputation differently from IPv4. Gmail and Microsoft weigh domain reputation more heavily for IPv6 senders than IP reputation — an unwarmed IPv6 address on a domain with established reputation will generally perform better than an unwarmed IPv4 address. Conversely, IPv6 addresses from new prefixes that have no sending history at all may encounter stricter filtering at ISPs that have limited data on the sending organization's IPv6 range. A separate virtual-mta-pool for IPv6 addresses, with separate domain block configuration that allows monitoring IPv6-specific delivery performance independently from IPv4, is the recommended design. This allows IPv6 performance to be evaluated and adjusted without commingling its signals with the IPv4 pool's reputation data.Operational questions about managing sender reputation in PowerMTA environments, responding to blacklist events, integrating monitoring tools, and interpreting ISP response patterns.
pmta command-line tool's ability to modify virtual-MTA status (pmta hold virtualMtaName) and the ability to update configuration files with a reload. When a sending IP is listed on Spamhaus — whether SBL (Spamhaus Block List), XBL (Exploits Block List), or PBL (Policy Block List) — the response sequence matters: (1) immediately remove the listed IP from active sending using pmta hold, (2) identify the listing type and cause using the Spamhaus lookup tool, (3) for SBL listings, correct the sending practice that caused the listing before requesting removal, (4) submit the delisting request through Spamhaus's removal process — automated delisting is available for SBL if the sending behavior has demonstrably changed. Attempting delisting without correcting the underlying behavior results in re-listing within days.pipe directive in a domain block for the FBL sender's domain. ISPs that support SMTP-based FBL delivery (Yahoo, Comcast, and others using the ARF — Abuse Reporting Format — standard) send complaint messages to a configured address. PowerMTA receives these messages and forwards them to the processing script, which extracts the original message ID from the complaint and suppresses the complaining recipient. For Microsoft JMRP (Junk Mail Reporting Program), the setup is separate from PowerMTA configuration: registration occurs through Microsoft's JMRP enrollment portal, which requires providing the sending IP ranges and a complaint processing email address. Complaints arrive via email in ARF format at the registered address. Processing these complaints into PowerMTA's suppression list requires extracting the X-HmXmrOriginalRecipient header from the complaint message — this header contains the actual complaining recipient address, which Microsoft hides in the To: header of the complaint for privacy. A script that reads JMRP complaints, extracts X-HmXmrOriginalRecipient, and adds the address to PowerMTA's suppression database completes the integration.X-Traffic-Type: transactional or X-Traffic-Type: marketing). PowerMTA's smtp-pattern-list within a queue block reads this header and assigns the message to the appropriate virtual-mta-pool. (2) SMTP port-based routing: The sending application connects to different SMTP ports on the PowerMTA server — for example, port 25 for transactional and port 587 for marketing. PowerMTA's listener configuration assigns incoming connections on each port to a specific virtual-mta-pool. (3) Recipient domain routing: For organizations where traffic type correlates with destination (unusual), domain blocks can route specific destination domains through specific IP pools. Header-based routing is the most flexible and is the recommended approach for most deployments, as it does not require infrastructure-level changes when routing decisions change and provides the cleanest audit trail in PowerMTA's accounting log.We design and operate managed infrastructure environments using PowerMTA and MailWizz for high-volume senders. Configuration, reputation management, and operational oversight — fully managed.