procmail
[Top] [All Lists]

Re: Multiple commands on split

1996-07-28 19:17:44
Jim Osborn wrote,

| FWIW, the goal of this little effort is to extract the From: address
| from a SmartList envelope and send each such address a form note.

I think, Jim, you're doing this the hard way.  Since there are three ways
I can see of interpreting your question, I'll give an answer for each:

(1) If you just want to collect the return addresses from a folder, use

    formail -rzxTo: -s < folder
    or
    formail -rtzxTo: -s < folder

    if you want them figured using the -rt precedences.

(2) If what you want is all the From: addresses, whether those are the return
    addresses or not,

    formail -zxFrom: -s < folder

    collects the From: addresses of all the messages in formail's stdin with
    only one process, no pipes (except the one you might need for feeding
    stdin to formail if it is being currently generated by another process),
    and no extra shells.

(3) If you always want the From: address even if there is a Reply-To: [as per
    #2] but you want to use formail -r to strip out comments, I got this to
    work:

    formail -XFrom: -s formail -edrzxTo: -s < folder

    It isn't really necessary to specify the -e and -d options: with only one
    line of input each, the forked formails are going to have to act as if -e
    and -d were in effect anyway.  However, this still runs formail N+1 times
    (where N is the number of messages in the input) instead of just once as
    in #1 and #2, and I don't see a need to remove comments if each addressee
    will get an individual mailing.

As to the general question of multiple commands on the output split by
formail -s, I don't know offhand, but since your example can be handled
without that, we don't need to figure it out yet.

I suppose that (being a ksh kind of guy), I'd attack it in a fashion like
this: 

    formail -XFrom: -s < folder | ( date ; while read victim ; \
         do Mail -s "You're in for it now" "$victim" < canned_text ; \
            echo "$victim" ; \
         done ; echo ) >> rogues_gallery

Between "do" and "done" you can reference $victim as many times as you like.

<Prev in Thread] Current Thread [Next in Thread>