OK, here's a partial success:
#test_mail.pl
use Net::SMTP;
use Net::Cmd;
$smtp = Net::SMTP->new(
Host => '192.168.55.173',
Debug => 1,
);
$smtp -> mail("root\@test-server.my.home");
@good = $smtp -> recipient('good_address@my.home','bad_address@my.home
+',{ SkipBad => 1, Notify => ['FAILURE']});
$mess = $smtp->message();
$smtp -> data();
$smtp -> datasend("TO: good_address@my.home\n");
$smtp -> datasend("TO: bad_address@my.home\n");
$smtp -> datasend("SUBJECT: Test e-mail from root\n");
$smtp -> datasend("\n");
$smtp -> datasend("A test message.\n");
$smtp -> dataend();
print "These addresses went: @good\n";
print "Status of last address: $mess\n";
$smtp -> quit();
Which outputs the following:
These addresses went: good_address@my.home
Status of last address: 5.1.1 User unknown
But that only works if the bad address is the last one in the list. (OK, that's fine for some cgi scripts I have that only accept one e-mail address.) But how to get each result dynamically?