my( $outlook, $message ) = open_outlook(); build_email( $message, $maindate, $file ); send_email( $message ); sub build_email { my( $message, $date, $file ) = @_; my $displaydate = format_date( $date ); $message->{'To'} = q{toaddress@domain.com}; $message->{'Subject'} = q{This is the subject}; ( $message->{'Body'} =<<" EOBODY" ) =~ s/^ //gm; blah blah blah EOBODY my $attachment = $message->Attachments(); $attachment->Add( $file ); return 1; } sub send_email { my $message = shift; $message->Send(); return 1; } sub open_outlook { my $outlook = Win32::OLE->GetActiveObject( 'Outlook.Application' ) || Win32::OLE->new( 'Outlook.Application', \&OleQuit ) || die "can't create Outlook.Application: is it installed? : $! : $^E"; my $message = $outlook->CreateItem(0) || die "can't create new message : $! : $^E"; return( $outlook, $message ); } #### s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; = qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)