Re: [exim] redirect driver + transport choice

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Marcin Gryszkalis
Date:  
À: exim-users
Sujet: Re: [exim] redirect driver + transport choice
On Sunday of May 24 2009, W B Hacker wrote:
> Sounds reasonable - but also points to a solution.
> One in which you use the 'unseen' structure differently.
> Or perhaps not at all.


Sounds heretic ;)

> GIVEN: A 'real' Exim expert can do all this without leaving Exim's own
> toolset, or needing SQL at all.


I strongly believe in that - that's why I posted the question to the list :)

> But for those of us who understand SQL better than Exim, a less efficient
> route can deliver the same result - sooner.
> If you are using SQL at all...as you are ... consider using SQL - AND
> nothing else - for all of the decision-making and 'steering'.


That's very interesing idea - though tt requires rewriting 1000 line long exim
config, I'm a bit afraid of such total change. A year has passed since I
switched from postfix and I never looked back but still sometimes small bugs
in config take long minutes to be found...


> Repetitious?
> Yes. Exim won't cache SQL returns.


At least the database has the cache and with proper settings 99% queries will
be served from cache.

> What with anti-looping, multi-pass and 'unseen' rules, one has to get
> clever to even 'see', let alone predict what might be in an address_data
> variable at each stage of the process. Look at what you have just been
> through these past few days.
> ;-)


Thrilling ;) Rewriting exim in SQL....

> A 'SELECT', OTOH, is obedient, transparent, predictable, and easily vetted
> independently of whatever is going to be using it.
>
> YMMV, but our routers AND transports each make their OWN SQL calls.
> Sometimes the very same one just made a few lines earlier. Or nearly so. Or
> not at all the same. Whichever suits *their* need.


Wondering why exim doesn't have generic variable system, where I could define
arbitrary variables, assign anything I want to them etc...

> HTH,

It helped in the way I looked at the processing from different angles :)

Anyway, what else I tried:

1. First attempt was to use accept router and autoreply transport (instead of
redirect). It partially worked - the mail was copied to sms address but the
body was empty.


mysql_sms:
    driver = accept
    no_verify
    no_expn
    condition = ${lookup mysql {SELECT if(sms is null or sms='','no','yes') as c 
FROM user WHERE username='${quote_mysql:$local_part}' AND 
domain='${quote_mysql:$domain}'}{$value}fail}
    transport = sms
    unseen


sms:
driver = autoreply
transport_filter = /exim/sms-filter.pl
headers_add = "X-SMS-Gateway-Filter: Yes"
reply_to = "postmaster@${domain}"
to = ${lookup mysql {SELECT sms FROM user WHERE username='${quote_mysql:
$local_part}' AND domain='${quote_mysql:$domain}'}{$value}}


As I found in docs transport_filter applies only to body of message that I can
attach to the message via return_message option - that's not what I need.

2. In the meantime I thought about pipe transport with filter reinjecting the
mail into exim, but didn't tried it yet

3. Other thing that come to my mind was rewriting autoreply trasnport - it
must not be THAT hard, right? ;)

4. But I realized that it's great opportunity to check built-in perl 
subroutines (as the filter was already written in perl). So I did
    driver = autoreply
    text = ${perl{sms_filter}{$message_body}}
    subject = ${perl{sms_filter}{$h_subject:}}


And it works with one minor inconvenience - I cannot limit size of filtered
subject + body - I know I could send size of subject as param to perl
function while filtering body but... who cares ;)


greetings
--
Marcin Gryszkalis, PGP 0x9F183FA3
jabber jid:mg@???, gg:2532994
http://the.fork.pl