<domain *> # Default for all domains max-smtp-out 5 max-msg-rate 100/h use-starttls if-available </domain> Gradually increase volume per source IP.
openssl genrsa -out /etc/powermta/keys/example-dkim.key 2048 openssl rsa -in example-dkim.key -pubout -out example-dkim.pub # Add public key to DNS: mail._domainkey TXT "v=DKIM1; k=rsa; p=..." <domain example.com> bounce-domain bounces.example.com # VERP bounces spf-identity mfrom # Use MAIL FROM for SPF </domain> 6.3 IP Restrictions (Inbound Relay) <accepted-connect 127.0.0.1> allow-submission yes require-auth no </accepted-connect> <accepted-connect 10.0.0.0/8> allow-submission yes require-auth yes auth-plain /etc/powermta/passwd </accepted-connect> 7. Logging & Monitoring 7.1 Delivery Log Format log-format-extended "mail.log" "%ts %d %r %s %S %T %p %b %B" # Fields: timestamp, domain, recipient, status, size, time, IP, bounce, message-id 7.2 Bounce Processing bounce-log /var/log/powermta/bounce.log bounce-category-log /var/log/powermta/bounce-category.log permanent-bounce-after 7d # Suppress after 7 days of soft bounces 7.3 HTTP API & SNMP http-mgmt-port 8080 http-mgmt-interface 0.0.0.0 http-mgmt-auth /etc/powermta/htpasswd snmp-port 161 snmp-community public
<virtual-mta marketing> bounce-log /var/log/powermta/bounce.log dns-timeout 60 <domain gmail.com> max-smtp-out 20 max-msg-rate 5000/h </domain> <domain *> max-smtp-out 5 max-msg-rate 100/h </domain> </virtual-mta> powermta configuration guide
curl -u user:pass http://pmta-server:8080/api/v1/stats 8.1 Memory & I/O queue-shards 16 # Reduce lock contention memory-pool-max 2G spool-buffer-size 512k max-message-size 50M 8.2 Adaptive Throttling Automatically slow down when remote servers defer.
Start & enable:
<virtual-mta marketing> source 192.168.1.10 max-smtp-out 50 dns-timeout 30 bounce-log /var/log/powermta/bounce-marketing.log </virtual-mta> <virtual-mta transactional> source 192.168.1.11 max-smtp-out 200 bounce-log /var/log/powermta/bounce-transactional.log </virtual-mta> 5.1 Domain-Specific Throttling Prevent overloading a single domain (e.g., Gmail, Yahoo).
<source 192.168.1.10> process-x-remote-mta-ip yes always-use-mx yes max-smtp-out 100 use-starttls if-available </source> <source 192.168.1.11> virtual-mta primary # Assign to a Virtual MTA </source> Isolate traffic types (e.g., marketing vs transactional). <domain *> # Default for all domains max-smtp-out
http-mgmt-port 8080 http-mgmt-interface 127.0.0.1 Always validate config before reload:
adaptive-max-smtp-out yes adaptive-soft-bounce-limit 10 # Reduce conns if 10 soft bounces/min adaptive-backoff-interval 5m <source-pool 192.168.1.0/28> # 16 IPs random-ip yes max-smtp-out 1000 </source-pool> <virtual-mta rotating> source-pool 192.168.1.0/28 dns-rotate yes </virtual-mta> 9. Common Pitfalls & Solutions | Problem | Likely Cause | Fix | |---------|--------------|-----| | All mail stuck in queue | DNS resolution fails | Check /etc/resolv.conf , increase dns-timeout | | High deferral rate | Throttling too aggressive | Increase max-smtp-out or max-msg-rate | | Bounce rate >10% | Poor list quality | Implement bounce suppression list | | PMTA stops accepting mail | Spool full or max-queue-size reached | Move spool to larger disk, increase max-queue-size | | Slow injection from MUA | No max-smtp-in limit | Set max-smtp-in 5000 | 10. Example: Production-Ready Config Snippet # /etc/powermta/powermta.conf smtp-port 25 max-smtp-in 5000 max-smtp-out 2000 queue-interval 2s max-delivery-attempts 6 memory-pool-max 4G <source 203.0.113.10> virtual-mta marketing max-smtp-out 200 use-starttls yes </source> Start & enable: <virtual-mta marketing> source 192
log-format-extended "/var/log/powermta/delivery.log" "%t %d %S %p %r" bounce-log "/var/log/powermta/bounce.log"