Re: [Exim] $address_data and appendfile transport

Top Page
Delete this message
Reply to this message
Author: Matthias Pronk
Date:  
To: exim-users
Subject: Re: [Exim] $address_data and appendfile transport
Thanks for your help! Everything works now!
Removing the spaces resolved most problems.
Thank you for providing the best MTA available!

- Matthias

Philip Hazel wrote:

>On Mon, 15 Sep 2003, Matthias Pronk wrote:
>
>
>
>>   1. I can't make the appendfile transport to use data that has been
>>      queried in the router (using $address_data). Can you tell me what
>>      I'm doing wrong?

>>
>>
>
>Have you used the -d option to test? It should show you what is being
>set in $address_data. However, I think your problem might be to do with
>spaces:
>
>
>
>>mysql_delivery:
>> driver = appendfile
>> maildir_format
>> directory = ${extract{ maildir }{ $address_data }}
>> delivery_date_add
>> envelope_to_add = true
>> return_path_add = true
>> user = ${extract{ uid }{ $address_data }}
>> group = ${extract{ gid }{ $address_data }}
>>
>>
>
>Try using {maildir} and {uid} instead of { maildir } and { uid }.
>Maybe it should, but I don't think Exim does, remove leading and trailing
>spaces from key names.
>
>
>
>>   2. The 'mysql_user' router doesn't seem to 'decline' when there are
>>      no records returned from MySQL to $address_data.

>>
>>
>
>There's no reason why it should. You have specified:
>
> address_data = ${lookup mysql { MYSQL_QUERY_USER }{ $value }}
>
>If the lookup fails, $address_data is set to the empty string because
>you have not specified what to do on failure, and that is the default.
>If you read the spec for address_data, you will find (in doc/spec.txt):
>
>address_data                    Type: string*                  Default: unset

>
>    The string is expanded just before the router is run, that is, after all
>    the precondition tests have succeeded. If the expansion is forced to fail,
>    the router declines. Other expansion failures cause delivery of the
>    address to be deferred.

>
>Note the second sentence. You need to force expansion failure if you
>want the router to decline. Specifically, you need
>
> address_data = ${lookup mysql { MYSQL_QUERY_USER }{ $value }fail}
>
>(And incidentally, do you actually want the leading and trailing space
>after $value? They will be taken as part of the data.)
>
>
>
>>   3. I've got a router which maps anything@??? to
>>      anything@???, i've called it domain aliases.
>>      The only way i could make it work was using the MySQL concat
>>      function (which I think isn't very nice), are there options to do
>>      this 'concatenation' in Exim?

>>
>>
>
>I'm not an SQL person, so not sure exactly what you are doing. However,
>concatentation can be achieved in expanded strings. A lookup is just
>part of an expanded string. If you just want to change a domain by
>lookup, you can do something like
>
> data = $local_part@${lookup .... to select a new domain}
>
>
>