On 2008-01-11 at 09:02 +0100, Arkadiusz Miskiewicz wrote:
> Hello,
>
> I have few rewriting rules that apply to the same address:
>
> root@??? "$h_from:" Ffs
> root@??? "ups@???" Ffs
>
> Now first rule fails because of:
Don't you want "${address:$h_from:}" ?
> Rewrite of root@??? yielded unparseable address: malformed address:
> <somebadaddress@???> may not follow somebadaddress@??? in address
> somebadaddress@??? <somebadaddress@???>
>
> exim stops rewriting after this problem. I would like for second rule to be
> applied if first fails.
The string is expanded. So given that the rules are the same, you can
use:
root@??? "${if def:h_from:{${address:$h_from:}}{ups@???}}" Ffs
(warning: untested and I no longer use any rewrites so am rusty on
those)
Exim quite happily uses multiple rules but you need to avoid giving it
bad rules. However, you can fail the expansion to force it to continue;
The Exim Specification, 31.6, "Rewriting replacements":
----------------------------8< cut here >8------------------------------
If the expansion is forced to fail by the
presence of "fail" in a conditional or lookup item, rewriting by the current
rule is abandoned, but subsequent rules may take effect. Any other expansion
failure causes the entire rewriting operation to be abandoned, and an entry
written to the panic log.
----------------------------8< cut here >8------------------------------
So yes, you can do:
root@??? "${if def:h_from:{${address:$h_from:}}fail}" Ffs
root@??? "ups@???" Ffs
-Phil