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