Re: proper way to assign return value to a variable

Richard Reina <[email protected]>
Newsgroups gmane.mail.procmail
Message-ID <[email protected]>
I changed it around a bit and I think I might be getting closer but it
appears that the line the recipe:
:0
 |ripmime -i -d /home/richard/.pmdir/attachments/ &&\
  /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
rename_att($ENV{SUBJECT});'

is not executing properly.  Here's what the log says:

procmail: No match on " /usr/bin/perl -e 'require "/home/richard/.pmdir/
test_subject.pl"; test_subject($ENV{SUBJECT});'"
procmail: Executing "ripmime -i -d /home/richard/.pmdir/attachments/ &&\
  /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
rename_att($ENV{SUBJECT});'"
procmail: Assigning "LASTFOLDER=ripmime -i -d
/home/richard/.pmdir/attachments/ &&\
  /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
rename_att($ENV{SUBJECT});'"
procmail: Notified comsat: "richard@:/home/richard/mail/.inboxes/ripmime -i
-d /home/richard/.pmdir/attachments/ &&\
  /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
rename_att($ENV{SUBJECT});'"

Again, thank you very much for the help so far.  Any suggestions on what I
am still doing wrong would be very much appreciated.

Thanks

Richard

Here is the entire recipe:

# I like to keep recipes in a separate file
# Be careful with the regular expressions, read the man page for specifics


#grab the subject
SUBJECT=""
:0
* ^FROM:.*
* ^Subject:[    ]*\/[^  ].*
{
       SUBJECT=$MATCH
}

:0 W # send to test_subject.pl to check for PO no.
* ? /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
test_subject($ENV{SUBJECT});'
    # failed subject test
|( formail -rI"From: Replys automatically discarded <[email protected]>";
\
   echo "Your mail has been returned."; \
   echo "It was NOT received because it does not contain a valid PO in the
subject"; \
   echo "Please resubmit with a valid PO number in the subject line."; \
 ) | /usr/sbin/ssmtp -oi -t

:0  #2nd colon means use locking so we don't get 2 files at once in friens
{ # valid load no
 :0
 |ripmime -i -d /home/richard/.pmdir/attachments/ &&\
  /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
rename_att($ENV{SUBJECT});'
  :0:
  invoices
}


2010/12/30 Richard Reina <[email protected]>

>
>
> 2010/12/30 Richard Ball <[email protected]>
>
> On 30-12-2010 9:26, Richard Reina wrote:
>>
>>> If anyone could please help me with this I would REALLY, REALLY
>>> appreciate it.  I find procmail very cryptic for me and I am endangering my
>>> job by falling way behind on my other work -- not to mention neglecting my
>>> family.  Any help would be greatly appreciated. Currently I have a recipe
>>> that calls a perl script like this:
>>>
>>> :0 w # send to test_subject.pl <http://test_subject.pl> check for order
>>> no.
>>> * ? /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl <
>>> http://test_subject.pl>"; test_subject($ENV{SUBJECT};'
>>>
>>>
>>> This works fine, but what I need is to capture the return value of the
>>> script so that I can compare it in a conditional and depending on the result
>>> use it in another called script.  Something like the following:
>>>
>>> :0
>>> PO=`/usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl <
>>> http://test_subject.pl>"; test_subject($ENV{SUBJECT};'`
>>>
>>>
>>> :0:
>>> * PO ?? 0  # if PO equals zero. PO is NOT valid
>>> |( formail -rI"From: Responses will be automatically discarded <
>>> [email protected] <mailto:[email protected]>>"; \
>>>
>>>   echo "Your mail has been administratively rejected."; \
>>>   echo "PO is not valid." \
>>>  ) | /usr/sbin/ssmtp -oi -t
>>> :0
>>> {# else PO is valid strip the attachments and file it
>>> | ( ripmime -i -d /home/richard/.pmdir/attachments/  )
>>> | /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl <
>>> http://test_subject.pl>"; rename_attachments($ENV{PO});'
>>>
>>>
>>> If anyone could please help me.  I would really, really appreciate it.
>>> I'm in dire straights.
>>>
>>>  To do anything complex with procmail will require testing in an
>> environment where you aren't going to damage real email, so setup something
>> that will do that within the context of your system. Such a 'sandbox' is
>> available by taking a look at the information provided by Sean at
>> http://www.professional.org/procmail/disclaimer.html and I *really*
>> recommend you take the time to do read and understand it (especially if this
>> is important for your job performance) the time taken will be worth it in
>> the end.
>>
>>
> I am testing with bogus emails that I send myself so that nothing can get
> messed up.
>
>
>> Are the perl scripts you have written performing properly? If you feed
>> them an example email will they do all that is required or are you just
>> putting in placeholders that you are hoping will function when you finish
>> with them?
>>
>> Yes.  I have tested them independently and the return values that come
> back are correct.
>
>
>> Procmail has an E flag which can be used for 'else if' type conditions and
>> as was mentioned earlier you need to be aware of the difference between
>> delivering and non-delivering recipes. The f flag for 'filter' is useful to
>> create a non-delivering recipe if you need to feed the message to a program
>> outside procmail to get some work done.
>>
>> Don't append a : to the :0 construct unless you are writing to a file (it
>> means create a lockfile and that can present problems unless you're familiar
>> with what is going to happen).
>>
>>
> Thanks for clarifying.
>
>
>> I don't understand why you need to call the perl script twice. Can't it
>> test for a valid PO# and if it is one go ahead and strip attachments and
>> save the needed information all at once? Then return success or failure to
>> tell you whether a valid number was there or not.
>>
>>
> I initially tried that approach.  However, if the email that ripmime is
> supposed to rip the attachment from is not the current email being
> processed, ripmime needs to be told what file to strip meaning that the
> email ( by itself ) needs to be written to a file 1st so that ripmime can
> grab it. However, once I write to a file procmail quits. That approach gave
> me this:
>
> :0 W # send to test_subject.pl to check for PO no.
> * ? /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
> test_subject($ENV{SUBJECT});'
>     # failed subject test
> |( formail -rI"From: Replys automatically discarded <[email protected]>";
> \
>    echo "Your mail has been returned."; \
>    echo "It was NOT received because it does not contain a valid PO in the
> subject"; \
>    echo "Please resubmit with a valid PO number in the subject line."; \
>
>  ) | /usr/sbin/ssmtp -oi -t
>
> :0:  #2nd colon means use locking so we don't get 2 files at once in
> friends
> { # passed subject tes. It has a valid PO no
>   :0 c     # copy to freinds and invoices
>   friends
>
>   :0  # write it to invoices so that ripmime knows where to find it
>        # and so that rip_attachments knows what email the attachments
> #belong to  invoices
>
>   :0 W #rip the attachments rename and save them
>   * ? /usr/bin/perl -e 'require "/home/richard/.pmdir/test_subject.pl";
> rip_attachments($ENV{SUBJECT})
> ;'
>
> }
>
>
>
> Basically:
>
>>
>> :0
>> * ^Subject: (some test here for a PO# expression)   #is this even a
>> possible PO# email?
>> {
>>   :0fW
>>   | perl_script_that_does_the_work
>>
>>   :0a                                      #the a flag will execute this
>> recipe if the above recipe succeeded
>>   use_sendmail_to_tell_me_a_valid_PO_was_received
>> }
>>
>> # we're here if the email had nothing to do with PO#s, process further or
>> discard as you wish
>>
>>
>>
>>
>> ____________________________________________________________
>> procmail mailing list   Procmail homepage: http://www.procmail.org/
>> [email protected]
>> http://mailman.rwth-aachen.de/mailman/listinfo/procmail
>>
>
>

____________________________________________________________
procmail mailing list   Procmail homepage: http://www.procmail.org/
[email protected]
http://mailman.rwth-aachen.de/mailman/listinfo/procmail
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.