Earlier this year we had a discussion on automagically setting From header 
according to which mailing list is being posted to.

Phil helpfully suggested (in message quoted below) a transport with a 
rewrite rule that uses the recipient address as key to a lookup, the 
result of which being used to replace the From header on the way out.

The (untested) transport Phil suggested looked like (modulo line wraps):

|   max_rcpt = 1
|   headers_rewrite = [EMAIL PROTECTED] 
|    [EMAIL PROTECTED]/etc/mail/subaddress-maps/[EMAIL PROTECTED] f

Some months later, I'm trying to implement something like this, but I've 
got stuck.  As far as I can tell, within a rewrite rule, $local_part 
actually refers to the address being rewritten, which for an 'f' rewrite 
rule, means the *sender address*.  Which is no use here :-(

(Earlier in his post, Phil explained he was temporarily confused about 
this distinction - but thought he had it sorted later.  But now I'm 
confused!)

So, is there a way to access the recipient address inside an 'f' rewrite 
rule ?  At least, inside a transport when there's only 1 recipient.  
Kinda looks like not, so I probably need a rethink.

Thanks for any clue.

Chris

PS - FWIW I'm not interested in mangling the return-path, as my lists only 
seem to care about the From header.




On Sun, 9 Mar 2008, Phil Pennock wrote:

| Date: Sun, 9 Mar 2008 03:54:04 -0700
| From: Phil Pennock <[EMAIL PROTECTED]>
| Reply-To: [email protected]
| To: Luke Sheldrick <[EMAIL PROTECTED]>
| Cc: "[email protected]" <[email protected]>
| Subject: Re: [exim] Rewrite FROM address
| 
| On 2008-03-08 at 16:33 +0000, Luke Sheldrick wrote:
| > Howrver have changed $1 for $local_part, and it does work, however there 
are a couple of glitches.
| 
| Okay, again it's after 3am and I have a couple of glasses of wine in me,
| but I see why I used $1 before, not $local_part.  $local_part is the
| recipient local part, $1 was matched against the sender.
| 
| In the header rewrite, use $1 as originally stated.
| In the return_path setting, instead of $1 or $local_part use
| $sender_address_local_part -- this just gets longer and longer.  ;)
| 
| > Also if exim cannot find the txt file for a user in the subaddress
| > folder (or redir as I called it) it is failing the messages.. Is there
| > a way to get around this, i.e. If there is now file, to keep it as it
| > were?
| 
| Oh.  If the file doesn't exist, it's probably being treated as an
| unforced failure because the lookup didn't exist, not as a forced
| failure (key not found so using the "fail" clause).
| 
| Oh, and the return_path wasn't setting the domain.
| 
| Okay, so now we're up to:
| 
|  return_path = ${if exists 
{/etc/mail/subaddres-maps/$sender_address_local_part} \
|   [EMAIL PROTECTED]/etc/mail/subaddress-maps/[EMAIL PROTECTED]
|   {$return_path}}
| 
| Having fun yet?  :^)
| 
| > And one more :P could we rewrite the script slightly, so it rewrites
| > the complete email address? As at the moment will only do it for
| > an0key.co.uk, and whilst there is only three domains on this setup
| > (i.e. My home / test env) would be good if in the redir folder I could
| > put [EMAIL PROTECTED] for example?
| 
| Hey, at last one which isn't my fault, but just something not originally
| asked for.  Cool.
| 
| Okay, for the return_path this makes it shorter, since instead of
| $sender_address_local_part you can just use $sender_address (in both
| places).
| 
| For the headers_rewrite, use [EMAIL PROTECTED] and then $2 to refer to the 
domain;
| once in the filename ([EMAIL PROTECTED]) and once when constructing the 
address.
| 
| So, if I'm not mistaken (again) this should be:
| 
|   max_rcpt = 1
|   headers_rewrite = [EMAIL PROTECTED] [EMAIL 
PROTECTED]/etc/mail/subaddress-maps/[EMAIL PROTECTED]@$2 f
|   return_path = ${if exists {/etc/mail/subaddres-maps/$sender_address} \
|     [EMAIL PROTECTED]/etc/mail/subaddress-maps/[EMAIL PROTECTED]
|     {$return_path}}
| 
| Note that this assumes that the domain remains unchanged.  If you want
| to be able to change the domain too, then include the domain in the
| value in the lookup file instead and use:
| 
|   max_rcpt = 1
|   headers_rewrite = [EMAIL PROTECTED] [EMAIL 
PROTECTED]/etc/mail/subaddress-maps/[EMAIL PROTECTED] f
|   return_path = ${if exists {/etc/mail/subaddres-maps/$sender_address} \
|     [EMAIL PROTECTED]/etc/mail/subaddress-maps/$sender_address}{$value}fail}}\
|     {$return_path}}
| 
| Note further that this still remains untested by me.  Caveat emptor.
| 
| Regards,
| -Phil
| 
| 


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

Reply via email to