Trying to Make an Alias Execute a Perl Script

peter at peter at
Sat Feb 5 19:43:34 UTC 2011

I have a couple of entries in my /etc/mail/aliases that manipulate the contents of an e-mail message.  For example, 
     file: "| cat > /home/user/file.incoming"

receives an e-mail message and writes it to the hard drive.  Another example:

     format: "| sed 's/^.$/~~/g' | sed 's/^$/~~/g' | tr -s ' ' ' ' | fmt 63 64 | sed 's/^ *//g' | tr '~' '\\012\' | mail user"

receives a message, reformats the contents, and sends the reformatted material back to me by e-mail.  

I'm trying to create a new alias that will receive an e-mail message, use a Perl command to scan for for all e-mail addresses, and return a list of any e-mail addresses found to me by e-mail.  

This little Perl command does a great job of identifying e-mail addresses and producing a list of them:

     perl -wne 'while(/[\S\.]+@[\S\.]+\w+/g){print "$&\n"}'

and I can use this from the command line these ways to extract e-mail addresses from a file:
     perl -wne 'while(/[\S\.]+@[\S\.]+\w+/g){print "$&\n"}' datafile
     perl -wne 'while(/[\S\.]+@[\S\.]+\w+/g){print "$&\n"}' < datafile
     cat datafile | perl -wne 'while(/[\S\.]+@[\S\.]+\w+/g){print "$&\n"}' 
I've tried this entry in my /etc/mail/aliases file, but it returns an empty e-mail messages:

     extract: "| perl -wne 'while(/[\S\.]+@[\S\.]+\w+/g){print "$&\n"}' | mail user"
I tried modifying it to create a datafile and then examine the datafile:

     extract: "| cat > datafile | perl -wne 'while(/[\S\.]+@[\S\.]+\w+/g){print "$&\n"}' < datafile | mail user"

but it is still returning an empty e-mail message rather than a list of e-mail addresses.  

What am I overlooking?  

This message sent via
$14.95 Lifetime accounts!  15GB disk!  No bandwidth quotas!

More information about the freebsd-questions mailing list