> On Nov 11, 2016, at 10.34, Noel Jones <njo...@megan.vbhcs.org> wrote: > > On 11/10/2016 6:00 PM, b...@bitrate.net wrote: >> On Nov 10, 2016, at 17.17, Noel Jones <njo...@megan.vbhcs.org> wrote: >>> >>> On 11/10/2016 4:05 PM, btb wrote: >>>> hi- >>>> >>>> i have an "appliance" which submits mail. it's inflexible, >>>> unfortunately, and uses crappy values for the envelope sender and the >>>> from: header. i have communicated with the vendor in an attempt to >>>> rectify this, but as might be expected, the outcome has been less than >>>> successful. >>>> >>>> hopefully some day, this changes, but in the interim, i'd like to >>>> rewrite the envelope sender and the from: header [ala >>>> sender_canonical_maps] for all mail from this client. >>>> >>>> how should i do this? is the best method to set up an additional >>>> cleanup(8) instance with its own sender_canonical_maps for just this >>>> client? somehow connect the client to its own smtp(8) service to use >>>> smtp_generic_maps? are there other/better methods? >>>> >>>> thanks >>>> -ben >>>> >>> >>> depending on "how" the addresses are broken, you can probably just >>> use canonical_maps to always rewrite the offending address to >>> something valid. There shouldn't be any need for additional cleanup >>> service unless you're fighting some common misspelling. >>> >>> Send specifics of what you're trying to rewrite for further help. >> >> in particular, this client impersonates our users, which we don't want. it >> is aware of users and their email addresses [it's part of a voicemail system >> which sends voicemail messages as email attachments, and "helpfully" claims >> the email message was sent by the caller]. for us, this is undesirable. >> >> when a user submits a message with a sender of u...@example.com, we of >> course don't want to change that. however, when this client does it, we do. >> the localpart is dynamic. for example, i would like to rewrite a sender of >> /^.*@example.com$/, but only when the message came from this client. many >> other messages with a sender which matches /^.*@example.com$/ are submitted >> from many other clients, but those don't need to be changed. >> > > > I see. This might be a good use of smtpd_command_filter. Add > another smtpd service on a different port and arrange for the wonky > client to connect there or use a firewall redirect to send the > client to the alternate port. > > A separate cleanup service can use header_checks to remove the false > From: header, don't bother trying to rewrite it. > > The extra master.cf service entries will look something like: > localip:2525 inet n - n - - smtpd > -o smtpd_command_filter=regexp:/path/to/filter.regexp > -o smtpd_client_restrictions=hash:/etc/postfix/voicemail,reject > -o cleanup_service_name=cleanup_voicemail > > cleanup_voicemail unix n - n - 0 cleanup > -o header_checks=header_checks_voicemail.regexp > > > > # The command filter something like (untested, but the general idea > is correct): > if /^MAIL FROM:\s.*example\.com/ > /^MAIL FROM:\s*<(.*)@example\.com/ MAIL FROM: > <voicemail+$1...@example.com> > fi > > # the the voicemail client map > ip.of.voicemail.system OK > > # and the header_checks_voicemail: > /^From: .*@example\.com/ IGNORE
thanks. i'll head down this path and see where it gets me.