On 30 Oct 2006, at 20:23, W B Hacker wrote:

> Online4You wrote:
>> Hi,
>>
>> We're trying to setup some extra routers in our Debian exim4  
>> config to check
>> for per-mailbox anti-spam settings. Some of these routers just  
>> check the
>> mySQL database for the customer setting in the "condition" and  
>> then add a
>> mail header so it is marked for later on. Then after several  
>> checks, the
>> mail is checked for these marks and should be acted on accordingly.

You cant do this in the data acl ?

>>
>> Now I've just found out that adding and removing headers isn't the  
>> way to
>> exchange information between routers because those are not  
>> effective until a
>> transport is reached.

Your router is NOT calling a transport ?
Can you do this by calling an external program (pipe transport?)

>>
>> How can I pass on information between routers so the next router  
>> can check
>> for something set in the previous router?

Can you give an example. The purpose of a router is to decide if a  
transport should handle a message or not. They don't realy do any  
processing - do they?
so where would you get data from to set the variable ?


>>
>> I'm looking for something like the $acl_m0 - $acl_m9 facility in  
>> the ACL but
>> then for use in routers.
>>
>> Thanks for helping out on this!
>>
>> Martijn
>>
>>
>
> You are in luck.  Maybe.  All the acl_m(x) variable 'final state',  
> i.e. on
> leaving acl_smtp_data, are stored in the queue with the message  
> headers & body.
>
> Even though any given 'label' for a variable, 'acl_m4', for  
> example, will have
> been re-used, perhaps hundreds of times, by other child processes  
> or later
> arrivals, those that were in effect at the time acl_smtp_data  
> completed can
> still be called on by a router or transport and by the same label  
> they had when
> stored, e.g. acl_m4, (for that message) etc.
>
> That's the good news, and if all you need is per-message, not per- 
> recipient,
> then you are home free. Read no further.
>
>
> The 'maybe' is the case where you DO want per-recipient information.
>
> Just as headers added in acl_smtp_data are per-message, not per- 
> recipient, so
> too are the acl_m(x) values. TANSTAAFL.
>
> Headers added in router/transport code OTOH, are per-delivery - i.e  
> per
> recipient for on-box delivery, per connection for remote_smtp, so  
> don't overlook
> their value.
>
> There is a kludge with aclM(x) variables, wherein it is easy to  
> *store*
> per-recipient information into an acl_m variable, because you can  
> build a string
> of arbitrary format by successive concatenation during the  
> acl_smtp_rcpt phase.
>
> Ex:
>
> acl_m4 = acl_m4 uid:[EMAIL PROTECTED] prefs=<something> :
>
> will add new to what was in already acl_m4 from the prevous pass,  
> producing:
>
>
> [EMAIL PROTECTED] prefs=<something1> : [EMAIL PROTECTED]  
> prefs=<something2>
>
> Getting specific information back *out* of the structure you have  
> built, on the
> other hand, may requires either some form of 'calculated' lookup,  
> BFBI, or a
> for-next loop or 'do while'.
>
> The first is provided for by certain of the lookup tools and by  
> 'extract'.
> How you tell a router where to look, when, why, and whether to do  
> it more than
> once, is harder.
>
> The BFBI way is a massive chain of successive routers, each looking  
> for a field
> one step further to the right than its predecessor.  Works fine for  
> small batches.
>
> ;-)
>
> OR  - a more clever equivalent where router A takes a look, passes  
> to router B,
> B takes a step to the right and looks, B hands back to A set to  
> look one step
> further right, until 'all gone' and off to the races with the results.
>
> Complex rules rules apply to prevent loops. Discarding prior router  
> data or
> headers is one of these.
>
> Finally, calling for some sort of *external* step-by-step iterative  
> routine that
> walks the records *within* a process, takes what it needs, passes on.
>
> Other than clever routing pass and 'goto' directives, Exim does not  
> provide a
> lot of 'for-next' looping tools where we can easily tap them, so a  
> call to
> external tools might be easiest.
>
> OTOH, once you are into the router/transports, the submitting host  
> has gone
> away, and there is more time to do these things.
>
> But rest assured - you *can* store the information with Exim's  
> built-ins.
>
> Now ... If someone will get the lights, there will probably be an  
> SQLLite
> tutorial shortly....
>
> HTH,
>
> Bill
>
>
>
>
> -- 
> ## List details at http://www.exim.org/mailman/listinfo/exim-users
> ## Exim details at http://www.exim.org/
> ## Please use the Wiki with this list - http://www.exim.org/eximwiki/
>


-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to