#!/usr/bin/perl
=pod
=head1 NAME
autoresponder - A scrtipt for receiving a mail and immediately replying.
=head1 SYNOPSIS
autoresponder [options] [filename]
=head1 DESCRIPTION
While installing a new mail server or client you typically are sending
and receiving test mails over and over again. Even worse, you sometimes
have to do a phonecall and ask someone for sending a mail to you.
This script will help you in some cases by setting up an email address
like
[email protected] that will receive email addresses and
immediately reply it back.
=head1 INSTALLATION
Install the prerequisite Perl modules, in particular Graham Barr's
excellent Mailtools package. L<Mail::Internet(3)>.
In /etc/mail/aliases or /etc/aliases, put lines like this:
autoresponder: "| /usr/local/bin/autoresponder"
owner-autoresponder: /dev/null
autoresponder-owner: /dev/null
Then do a "newaliases".
Edit the autoresponder script and change the reply-to address to
point back to one of the owner addresses. This should have the
advantage that you won't see error messages generated by the
autoresponder.
=head1 SCRIPT CATEGORIES
mailstuff
=head1 PREREQUISITES
The MailTools package, in particular the Mail::Internet module.
L<Mail::Internet(3)>.
=head1 OSNAMES
any OS using sendmail or a compatible mail server
=head1 AUTHOR
Jochen Wiedmann
Am Eisteich 9
72555 Metzingen
Germany
Email:
[email protected]
=head1 SEE ALSO
L<Mail::Internet(3)>, L<aliases(5)>
=cut
use strict;
############################################################################
#
# Configurable section
#
############################################################################
my $REPLY_TO = '
[email protected]';
#
# Use an entry like
#
# autoresponder-owner: /dev/null
#
# to suppress error messages from autoresponders replies.
#
############################################################################
use Mail::Internet ();
use Getopt::Long ();
use vars qw($opt_debug $opt_verbose $opt_help);
sub Usage() {
print <<EOF;
Usage: autoResponder [options] [filename]
Reads an email from [filename] (default: stdin) and replies to the sender.
Possible options are:
--debug Turn on debugging mode. (Suppresses actions)
--help Print this help message.
--verbose Turn on verbose mode.
EOF
exit 1;
}
eval { Getopt::Long::GetOptions('debug', 'verbose', 'help') };
Usage() if $@ || $opt_help;
$opt_verbose = 1 if $opt_debug;
my $fh;
if (@ARGV) {
my $file = shift @ARGV;
open(FILE, "<$file") or die "Failed to open $file: $!";
$fh = \*FILE;
print "Reading mail from $file.\n" if $opt_verbose;
} else {
$fh = \*STDIN;
print "Reading mail from STDIN.\n" if $opt_verbose;
}
my $msg = Mail::Internet->new($fh, 'Modify' => 0, 'MailFrom' => 'KEEP');
my @headers = @{$msg->head()->header()};
my @body = @{$msg->body()};
my @message = ("\n",
"Your mail was received by the autoresponder.\n",
"\n",
"Your headers have been:\n",
@headers,
"End of headers\n",
"\n",
"Your body follows:\n",
@body
);
$msg = $msg->reply();
$msg->body(\@message);
print("Replying to $REPLY_TO.\n") if $opt_verbose;
$msg->head()->replace('Reply-To', $REPLY_TO);
print("Replying message:\n", $msg->as_string()) if $opt_verbose;
$msg->smtpsend() unless $opt_debug;