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/
