in reply to Applying the brakes

As it seems that your mail server is exim, you can send the messages to it through a pipe using "batch SMTP":
open my $exim, "| exim -bS" or die; for (...) { print $exim <<'MSG'; MAIL FROM: foo@bar.com RCPT TO: doz@bar.com DATA Subject: Your Invoice To: You From: Me You have to pay 1,000,000 dollars . MSG }
If you want to parallelize, fork some processes and divide the task between them:
my $workers = 4; for my $ix (0..$workers-1) { unless (fork) { open my $fh, '<', $address_list_file_name or die; open my $exim, "| exim -bS" or die; while (<>) { next unless (($. % $workers) == $ix); send_invoice($exim, $_); } exit 0; } }