I need Postfix to send outgoing messages (from local PHP) with a certain rate. Say, one message in 120 seconds. Any messages exceeding this rate should be queued (delayed) and delivered later.
Policyd is not what I'm looking for. I don't need limiting overall number of messages sent. I need a pause (120s) between any two messages beeing sent.
Tried this config, but it's not working:
initial_destination_concurrency = 1
default_destination_concurrency_limit = 1
default_destination_rate_delay = 120
default_destination_recipient_limit = 1
default_process_limit = 1
Any suggestions?
You need to set
instead of 1. Because if set to 1 then the limit will only apply to the same recipient, not domain.
I'd use postfwd. I use it in production for rate limiting servers.
http://postfwd.org/doc.html#examples
You can throttle outbound emails:
Postfix will add a delay between each message to the same receiving domain with a delay of 1 second. The default value is 0s.
When you say that the above config is not working, is it not working to the same destination or to different destinations?
As far as a suggestion, it would be fairly trivial to script an on/off iptables rule to block outgoing connections to port 25. That would be my next suggestion.
Slow down clients sending mail too fast
smtpd_client_connection_rate_limit = 100
smtpd_client_message_rate_limit = 100
smtpd_client_recipient_rate_limit = 200
smtpd_client_new_tls_session_rate_limit = 100
#check this out
Maybe playing a bit with qmgr you could obtain some results.
http://www.postfix.org/qmgr.8.html
It's really common for people to do this for email going to yahoo. You can look at an example configuration at http://old.nabble.com/Create-Custom-Mail-Queue-td21577217.html#a21577217 , and tweak the numbers as you need.