#!/usr/bin/perl -w
use strict;
use Mail::Bulkmail;
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(vpolyakov@katrillion.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{errorlo
+g}
-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;
@address = map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { $_, lc((split /\@/)[-1]) }
@address;
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;
$bulk = Mail::Bulkmail->new(
LIST => \@address,
Message => $mail,
From => $option{f} || $default{fromaddr},
Subject => $option{s} || $default{subject},
BAD => catfile($dir, $option{e} || $default{errorlog}),
GOOD => catfile($dir, $option{l} || $default{successlo
+g}),
ERRFILE => catfile($dir, $option{e} || $default{errorl
+og}),
HTML => 1,
use_envelope => 1,
);
$bulk->HFM(1);
$bulk->envelope_limit(1000);
$bulk->header(qw(Content-type text/html));
$bulk->bulkmail;
Of course you can get past the same-directory limitation by passing something like
-a ../addresses.txt
Makeshifts last the longest.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.