Add skip list supoprt & encode_phrase() call for To: line

This commit is contained in:
Bradley M. Kuhn 2018-01-01 13:08:17 -08:00
parent 279ce453ba
commit 0e3f0fe882

View file

@ -19,15 +19,28 @@
use strict;
use warnings;
use Encode;
use Email::MIME::RFC2047::Encoder;
use utf8;
if (@ARGV != 3) {
print "usage: $0 <LIST_OF_ADDRESSES_FILE> <MESSAGE_FILE> <FRM_ADDR>\n";
my $encoder = Email::MIME::RFC2047::Encoder->new();
use utf8;
if (@ARGV != 3 and @ARGV != 4) {
print "usage: $0 <LIST_OF_ADDRESSES_FILE> <MESSAGE_FILE> <FRM_ADDR> [<SKIP_LIST_FILE>]\n";
exit 1;
}
my($LIST_FILE, $MESSAGE_FILE, $FROM_ADDRESS) = @ARGV;
my($LIST_FILE, $MESSAGE_FILE, $FROM_ADDRESS, $SKIP_LIST_FILE) = @ARGV;
my %skip;
if (defined $SKIP_LIST_FILE) {
die "$SKIP_LIST_FILE does not exist or is not readable: $!" unless -r $SKIP_LIST_FILE;
open(SKIP_LIST, "<", $SKIP_LIST_FILE);
while (my $line = <SKIP_LIST>) {
chomp $line;
$skip{$line} = $SKIP_LIST_FILE;
}
}
open(LIST, "<$LIST_FILE") or die "unable to open $LIST_FILE: $!";
my @sendTo;
@ -49,19 +62,33 @@ my @message;
close MESSAGE;
foreach my $fullEmailLine (@sendTo) {
$fullEmailLine =~ s/\s*#.*$//; $fullEmailLine =~ s/\s*$//; $fullEmailLine =~ s/^\s*//;
$fullEmailLine = Encode::encode("MIME-Header", $fullEmailLine);
#
my $emailTo = $fullEmailLine;
$emailTo =~ s/^[^<]+\<\s*([^\>]+)\s*\>\s*$/$1/;
my $doSkip = 0;
foreach my $skip (keys %skip) {
if ($fullEmailLine =~ /$skip/) {
print STDERR "Skipping $fullEmailLine\n";
$doSkip = 1;
last;
}
}
next if $doSkip;
open(SENDMAIL, "|/usr/lib/sendmail -f \"$FROM_ADDRESS\" -oi -oem -- $emailTo $FROM_ADDRESS") or
$fullEmailLine =~ s/\s*#.*$//; $fullEmailLine =~ s/\s*$//; $fullEmailLine =~ s/^\s*//;
my $emailTo;
die unless $fullEmailLine =~ /^"?([^\<]+)\s*"?\<\s*([^\>]+)\s*\>\s*$/;
($fullEmailLine, $emailTo) = ($1, $2);
$fullEmailLine =~ s/\s*\"?\s*$//; $fullEmailLine =~ s/^\s*"?\s*//;
$fullEmailLine = $encoder->encode_phrase($fullEmailLine) . " <" . $emailTo .">";
#
open(SENDMAIL, "|/usr/lib/sendmail -f \"$FROM_ADDRESS\" -oi -oem -- \"$emailTo\" \"$FROM_ADDRESS\"") or
die "unable to run sendmail: $!";
print SENDMAIL "To: $fullEmailLine\n"; # X-Precedence: bulk\n";
print SENDMAIL @message;
close SENDMAIL;
print STDERR "Sentto \"$fullEmailLine\" at $emailTo\n";
sleep 1;
}