http://qs321.pair.com?node_id=113851
Category: Win32
Author/Contact Info Rhet Turnbull
RhetTbull at hotmail.com
Description: Send an email and, optionally, attachments using Win32::OLE and Microsoft Outlook.
#!/cygdrive/c/Perl/bin/perl.exe -w

#Win32 perl script to send an email and (optional) attachments via Mic
+rosoft Outlook

use warnings;
use strict;

use Win32::OLE;

#get parameters from command line
#e.g. send_outlook.pl spam_me@hotmail.com "get rich quick!" "send me m
+oney and I make you rich!" "1337spammer@hotmail.com" "c:\melissa.exe"
#first (and only required param) is "To:" address
#second is subject
#third is text for message body 
#fourth is CC: address (you can leave this blank, e.g  "" on the comma
+nd line)
#rest are file attachments
#make sure you give the FULL path to the attachment or it may fail

my $to = shift || die "required parameter (to address) missing";
my $subject = shift;
$subject = "" if not defined $subject;
my $body = shift;
$body = "" if not defined $body;
my $cc = shift;
$cc = "" if not defined $cc;

#get new Outlook instance
my $mail = new Win32::OLE('Outlook.Application');
die "Unable to start Outlook instance: $!" if !defined $mail;

my $item = $mail->CreateItem(0);
die "Unable to create mail item: $!" if !defined $item;

$item->{'To'} = $to; 
$item->{'CC'} = $cc;
$item->{'Subject'} = $subject;
$item->{'Body'} = $body; 

#rest of args are file attachments
foreach my $attach (@ARGV)
{
    #make sure the attachment is really there
    die "Missing attachment $attach: $!" if !-e $attach;

    my $attachments = $item->Attachments();
    $attachments->Add($attach);
}

#send it
$item->Send();

my $error = Win32::OLE->LastError();
print STDERR "Win32::OLE error: $error" if $error;