tfxobrien has asked for the wisdom of the Perl Monks concerning the following question:

I need to write a script to search a static file (file1) that is in the form: Name Email tim tfxo@gmail.com bob bob@sss.com and then mail another file (file2) that is input from the command line. The command line would be: script who file2 subject for example: script bob file2 'montly changes report' and the result would be mail -s 'monthly changes report' bob@sss.com < file2 My centos is old and mail does not support -a I am a novice so if there is a better way please let me know. Thanks in advance.

Replies are listed 'Best First'.
Re: mail file
by zentara (Cardinal) on Jun 09, 2012 at 16:55 UTC
    You should try to break your problem up into smaller segments which you can more easily solve. First you need to search your file1 and pull out the information in an array. Once you have that solved, then you can use something like the following to do the multiple mailling. Is it absolutely neccessary that you do this using the "mail" program? Perl has modules which allow you to do it all in one script. For example, here is an untested script to show the idea.
    #!/usr/bin/perl use warnings; use strict; use MIME::Lite; # In the first part of the script you would search your file1 # and place your recipients and other info into an array. # I leave that part to you, please show some code, as this # is an educational site, not a script writing service my $filename = 'foobar.pdf'; my @recipients= ( "tfxo@gmail.com", "bob@sss.com", "z@zed.net" ); foreach my $recipient( @recipients ){ sendmsg( 'your@emailaddress', $recipient, 'the subject', 'body_tex +t', $filename ); } sub sendmsg { my ( $From_Addr, $Mail_Name, $Subj_Text, $Body_Text, $File_Name ) = @ +_; $MIME::Lite::AUTO_CONTENT_TYPE="true"; my $msg = MIME::Lite->new( From =>$From_Addr, To =>$Mail_Name, Subject =>$Subj_Text, Type =>'multipart/mixed', ); $msg->attach(Type=>'TEXT', Data=>$Body_Text, ); $msg->attach(Type=>'application/octet-stream', Path => './mailbody' , Filename => $File_Name ); MIME::Lite->send('smtp', "mail.somewhere.net", Timeout=>60); }

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh
Re: mail file
by aaron_baugher (Curate) on Jun 09, 2012 at 16:41 UTC

    In Perl, it's a good idea to use a module like MIME::Lite or Email::Simple to send mail. They eliminate a lot of the issues with running an external program like mail directly, like the need to escape certain characters on the command line, and they make attaching files easy.

    Other than that, perhaps you could show us what you've tried so far, so we can help you with it.

    Aaron B.
    Available for small or large Perl jobs; see my home node.