2

We have a server that sends our weekly newsletter to subscribers, To prevent people like Hotmail or Yahoo from blocking us due to sending too many simultaneous emails to them, Is there a way we can stagger email, or rate-limit outbound emails from postfix?

Keep in mind, I dont want the mailserver to stop queueing mail or accepting new messages, Simply defer delivery if there are more then 3-4 messages per destination domain/ipaddress, or something similar.

Note: I dont want a Sender Throttle, as described in a similar question, here. I'm looking more for a recipient throttle but haven't had any luck finding out how to do so with PolicyD or Anvil services, and was wondering if anyone else has accomplished such a task.

grufftech
  • 6,760
  • 4
  • 37
  • 37

5 Answers5

6

You could use the deadbeats trick:

main.cf:

transport_maps = hash:/etc/postfix/transport
deadbeats_destination_concurrency_limit = 50

master.cf:

deadbeats unix - - n - - smtp -o smtp_connect_timeout=5 -o smtp_helo_timeout=5 smtp_connect_timeout=2

transport.cf:

hotmail.com             deadbeats:
yahoo.com               deadbeats:
earthlink.net           deadbeats:
freemail.com.au         deadbeats:
rkthkr
  • 8,618
  • 28
  • 38
2

Should read:

deadbeats    unix    -    -    n    -    -    smtp 
    -o smtp_connect_timeout=5 
    -o smtp_helo_timeout=5 
    -o smtp_connect_timeout=2

And you should restart Postfix

user40991
  • 21
  • 1
2

To supplement rkthkr's post, you will need to run postmap on the transports file (man transport(5))

postmap /etc/postfix/transport.cf
mikewaters
  • 1,175
  • 1
  • 14
  • 27
1

you can also add in

main.cf

deadbeats_destination_recipient_limit = 5

for having 5 recipients per session

quaie
  • 1,122
  • 6
  • 14
0

I'm pretty sure that rkthr's suggested master.cf of

deadbeats unix - - n - - smtp -o smtp_connect_timeout=5 -o smtp_helo_timeout=5 smtp_connect_timeout=2

has the 'smtp_connect_timeout' parameter mistakenly listed twice. If for some reason you wanted to have it listed twice, you would need another '-o' as described in user40991's answer.