http://www.perlmonks.org?node_id=1205015

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

When I use mailx or sendmail (on RHEL 6.9, Perl v5.10.1) from within perl such as

qx( qq\cat $log | mailx -r $EMAIL_ADMIN -s "Exchange Backup Status $rp +tdate" $SEND_TO\ );
I receive the email in outlook with the following in the body of the message:
Message-ID: <5a27f1a0.VRRIyXDBT0l57yCy%xxx@yyy.com> User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit
If I run the command directly from the o/s, or have the perl code create a shell script with this command that then gets executed, this preamble does not appear.

Anyone know what may be going on here? I really don't want to use packages for such a simple operation.

Dan Giles, simple novice

Replies are listed 'Best First'.
Re: sending mail
by choroba (Cardinal) on Dec 06, 2017 at 17:07 UTC
    Nesting qq in qx doesn't work:
    $ perl -we 'qx(qq(ls))' sh: -c: line 0: syntax error near unexpected token `ls' sh: -c: line 0: `qq(ls)'

    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: sending mail
by haukex (Archbishop) on Dec 06, 2017 at 20:25 UTC

    Please have a look at my post here about the security issues with calling external commands. I really hope you've sanitized the variables you are interpolating into that shell command.

    I really don't want to use packages for such a simple operation.

    You will be doing yourself a huge favor by using a module like Email::Sender and the other Email::* modules by rjbs. Yes, even you can use CPAN! Example code.

    But if you really, really want to do it in pure Perl, then at least use a piped open instead of qx + cat: