On 2013.10.22 09.56, Noel Jones wrote:
On 10/22/2013 8:41 AM, btb wrote:
On 2013.10.21 17.54, Noel Jones wrote:
On 10/21/2013 3:53 PM, btb wrote:
i have a scenario in which certain email is sent using envelope
senders that contain host names that are known only on the local
lan/network, and unknown on the internet.  most mail expressing that
characteristic stays local, but occasionally, some is legitimately
destined for the public internet.  to that end, with such mail, i'd
like to change the sender domain part to @example.com, but only if
the recipient domain part does not end in example.com [both the
sender and recipient domain part may be @example.com,
@foo.example.com, @bar.foo.example.com, etc].

what is the right method for doing this?  given
ADDRESS_REWRITING_README, it seem to possibly be a fit for either
masquerade_domains or smtp_generic_maps, but i'm not certain, and
i'm not sure how to apply selectively.

-ben

smtp_generic_maps will do that nicely. Add the rewriting on the
"smtp" outgoing transport in master.cf to limit rewriting to
non-local recipient domains only.

#master.cf
# find the existing "smtp unix ... smtp" transport and add to it:
    -o smtp_generic_maps=regexp:/etc/postfix/generic.regexp


# generic.regexp
/^(.*)@some\.fantasy\.invalid$/  $1...@example.com

thanks.  wrt limit rewriting to non-local recipient domains only, by "stays 
local", i meant local in terms of the local network, not in terms of postfix.  
postfix is responsible for only systems.example.com:

virtual_mailbox_domains = ldap:$table_directory/virtual_mailbox_domains.cf

postmap -q 'systems.example.com' ldap:./tables/virtual_mailbox_domains.cf
systems.example.com

while everything else leaves via smtp and is delivered via mx records - some of 
which is for other recipients ending in @example.com or .example.com [delivered 
to other hosts on the local network], and the rest of course out onto the 
internet.  how can i apply smtp_generic_maps selectively, for only certain 
recipient domains [ones not ending in @example.com or .example.com] leaving via 
smtp - the goal being to rewrite the sender to @example.com for mail destined 
for the internet?

-ben


Postfix doesn't have a specific feature to rewrite the sender based
on the recipient.

Arrange for internal network traffic to use a specific transport,
such as the "relay" transport, and let internet traffic use the
default "smtp" transport.

thanks for this guidance. i have what [given my testing so far] appears to be a setup working as desired, but would appreciate any critiques or feedback wrt considerations i may have overlooked.

# transport used by mail leaving the local network
smtp      unix  -       -       -       -       -       smtp
    -o smtp_helo_name=msa.example.com
    -o smtp_generic_maps=regexp:$table_directory/generic.regexp

# transport used by mail not leaving the local network
example-internal      unix  -       -       -       -       -       smtp
    -o syslog_name=postfix/example-internal

>cat transports
# handled by postfix virtual(8)
foo.example.com         :
# valid/known on the internet
bar.example.com         :

example.com             example-internal:
.example.com            example-internal:

>cat generic.regexp
# rewrite everything that ends in .example.com, except bar.example.com
if !/^(.*)@bar\.example\.com$/
/^(.*)@.*\.example\.com$/      $1...@example.com
endif

-ben

Reply via email to