Email Round-Robin using Procmail
The need arose to have a specific email address round-robin (e.g., cycle through a collection of destination email addresses).
A solution was achieved through use of procmail and a little perl script. It probably could be done more easily and/or better, but I figured other people might find this interesting.
So, first, an alias was created in /etc/aliases (used by postfix in this case, but it should work for sendmail, and variants should work for other MTAs):
rrtest: |"/usr/bin/procmail -m /etc/postfix/roundrobin_procmail.rc"
Then, the following file was saved as /etc/postfix/roundrobin_procmail.rc:
:0 w:/tmp/rrlock { :0 dest=|/etc/postfix/rr.pl :0 ! ${dest} }
And then, of course, we need the perl program. Here’s /etc/postfix/rr.pl:
#!/bin/perl # ---------------------------------------------------------- @recipients = ( 'address1@sample.com', 'address2@sample.com', 'address3@sample.com' ); $index_file = 'rr-index.txt'; # ---------------------------------------------------------- $index_exists = 1; open(IN,"; close(IN); $index++; } else { $index = 0; } if ($index > $#recipients) { $index = 0; } open(OUT,">/tmp/${index_file}"); print OUT "$index\n"; close(OUT); print STDOUT $recipients[$index]; exit 0;
Elegant? Not really. But it seems to work 🙂
Leave a Reply