#!/usr/bin/perl -w
use strict;
use Mail::Bulkmail;
use Mail::AddressSort;
use File::Spec::Functions;
use Getopt::Std;
my %default = (
dir => ".",
addrfile => "addresslist.txt",
mailfile => "mail.txt",
errorlog => "error.log",
successlog => "success.log",
subject => q(Default subject),
fromaddr => q(email@domain.com),
);
getopts('a:d:e:hf:l:m:s:', \my %option);
$option{h} && die << "HELPMSG";
usage: bulkmail [-a addrfile] [-d directory]
[-e errorlog] [-h]
[-f fromaddr] [-l successlog]
[-m mailfile] [-s subject]
All files must reside in the same directory.
defaults: -a $default{addrfile} -d $default{dir}
-e $default{errorlog} -f $default{fromaddr}
-l $default{successlog} -m $default{mailfile}
-s $default{subject}
HELPMSG
my $dir = $option{d} || $default{dir};
open(my $listfile,"<",catdir($dir, $option{a} || $default{addrfile}))
or die "Couldn't open address list: $!\n";
chomp(my @address = <$listfile>);
close $listfile;
my $list=Mail::AddressSort->new();
$list->input(@address);
(@address)=$list->sorted();
open(my $mailfile,"<",catdir($dir, $option{m} || $default{mailfile}))
or die "Couldn't open message file: $!\n";
read $mailfile, my $mail, -s $mailfile;
close $mailfile;
my $bulk = Mail::Bulkmail->new(
'LIST' => \@address,
'Message' => $mail,
'From' => $option{f} || $default{fromaddr},
'Reply-to' => $option{f} || $default{fromaddr},
'Subject' => $option{s} || $default{subject},
'BAD' => catfile($dir, $option{e} || $default{errorlog}),
'GOOD' => catfile($dir, $option{l} || $default{successlog})
+,
'ERRFILE' => catfile($dir, $option{e} || $default{errorlog}),
'HTML' => 1,
'use_envelope' => 1,
'envelope_limit'=> 1000
) or die Mail::Bulkmail -> error();
$bulk->header(qw(Content-type: text/html));
$bulk->bulkmail;