#!/usr/bin/perl -w # Note by Mark Overmeer: # This script does work, but Mail::Send may provide a nicer interface # NAME # mail-mailer.pl - Smtp client written in Perl # # SYNOPSIS # mail-mailer.pl -s "Test" --smtp=my-smtp-server.com admin@net1.net # # INTRODUCTION # This script can be an alternative to the 'mail' Unix command when # sending e-mails. # It reads the mail body from the standard input. # If your system is Windows, use the '--smtp' option to send your # e-mails. # This script works in Linux, Unix and Windows environments. # # OPTIONS # -f From # -s Subject # -c Cc-address # -b bcc-address # --sendmail Use sendmail to send the e-mail # --qmail Use qmail-inject to send the e-mail # --smtp=HOSTNAME Use HOSTNAME as the SMTP server. # --help Prints the help info and exits # # EXAMPLES # cat mailbody.txt | mail-mailer.pl -f me@mydom.com -s "Hy dude" --sendmail friend@dom.com # # AUTHOR # Bruno Negrao G Zica # # COPYRIGHT # Copyright (c) 2004 Bruno Negrao G Zica. All rights reserved. # This program is free software; you can redistribute it and/or modify # it under the same terms as Perl itself. # # LAST MODIFIED # 01/12/2004 ################################################################## use Mail::Mailer; use Getopt::Long; use strict; # hash that'll receive the arguments and options my %opt; GetOptions ( \%opt, 'help', 'f=s', 's=s', 'c=s', 'b=s', 'sendmail', 'qmail', 'smtp=s' ); if ($opt{help}) { help(); exit 0; } $opt{to} = $ARGV[$#ARGV]; # the "To" address is the last argument die "Error: You didn't specify a destination e-mail address.\n" unless ( $opt{to} || $opt{c} || $opt{b} ); # Defining the method to send the message my $mailer; # Mail::Mailer object if ($opt{sendmail}) { $mailer = new Mail::Mailer 'sendmail'; } elsif ($opt{qmail}) { $mailer = new Mail::Mailer 'qmail'; } elsif ($opt{smtp}) { $mailer = new Mail::Mailer 'smtp', Server => $opt{smtp}; } else { die "Error: you didn't specify the delivery method. ". "Possible methods are:\n'--qmail', '--sendmail', and ". "--smtp=HOSTNAME\n"; } # Setting the headers my %headers; # hash with the e-mail headers $headers{To} = $opt{to}; $headers{From} = $opt{f} if defined $opt{f}; $headers{Cc} = $opt{c} if defined $opt{c}; $headers{Bcc} = $opt{b} if defined $opt{b}; $headers{Subject} = $opt{s} if defined $opt{s}; $mailer->open(\%headers); # Reading and feeding the e-mail body while () { last if ( $_ =~ /^\.$/ ); print $mailer $_; } # Finishing $mailer->close(); # Subroutines sub help { print ' Example 1: Entering the e-mail body by hand: mail-mailer.pl -s "Hy buddy" --qmail friend@domain.com [ ENTER YOU MESSAGE BODY ] [ A SINGLE . (dot sign) ALONE IN ONE LINE TO SAY ] [ YOU FINISHED YOUR E-MAIL ] . Example 2: Using the output of another program as the body: dir c:\ | perl mail-mailer.pl -f me@mydom.com -s "My c:\" admin@mydom.com --smtp=server1.mydom.com OPTIONS -f addr From address. -s TEXT Subject. -c addr Cc-address. -b addr bcc-address. --sendmail Use sendmail to send the e-mail. --qmail Use qmail-inject to send the e-mail. --smtp HOSTNAME Use HOSTNAME as the SMTP server. --help Prints this help text. '; }