PostSRSd integration with Exim ============================== ## SRS Return router If using a domain solely for SRS return addresses: SRS_DOMAIN = srs.your.domain begin routers srs_return: caseful_local_part domains = SRS_DOMAIN driver = redirect allow_fail data = ${if match {$local_part}{\N(?i)^srs[01]=\N} \ {${if match \ {${readsocket{inet:localhost:10002}{get ${quote_local_part:$local_part_prefix$local_part}@$domain}{3s}}} \ {\N^200 (.+)\N} \ {$1} \ {:fail: Invalid SRS bounce} \ }} \ {:fail: Invalid SRS bounce} \ } no_more If your SRS domain is also used for other addresses: SRS_DOMAIN = srs.your.domain begin routers srs_return: caseful_local_part domains = SRS_DOMAIN local_part_prefix = srs0= : srs1= driver = redirect allow_fail data = ${if match \ {${readsocket{inet:localhost:10002}{get ${quote_local_part:$local_part_prefix$local_part}@$domain}{3s}}} \ {\N^200 (.+)\N} \ {$1} \ {:fail: Invalid SRS bounce} \ } ## Rewriting outgoing mail in the SMTP transport The following excludes locally submitted mail, or mail submitted by authenticated users from SRS rewriting. Of course, if the sender address is already in one of our local domains, there is no need to rewrite the address. begin transports remote_smtp: debug_print = "T: remote_smtp for $local_part@$domain" driver = smtp return_path = ${if and { \ {!match_ip{$sender_host_address}{:@[]}} \ {!def:authenticated_id} \ {!match_address {$sender_address} { : *@+local_domains : *@+virtual_domains : SRS_DOMAIN}} \ } \ {${if match \ {${readsocket{inet:localhost:10001}{get $sender_address}{3s}}} \ {\N^200 (.+)\N} \ {$1} \ fail } \ } \ fail }