sounds to me like you want to run your SMTP in front of or within the Zimbra MTA setup, not the other way around. If you are all way in front (eg, spam appliance or cloud anti-spam service before delivery to Zimbra instance of postfix.) you have to configure your SMTP server to know what the accepted set of addresses are.
For mailboxes that do not live in Zimbra, you can do: Code:
zmprov ma account@domain zimbraMailTransport smtp:other.server
The above is very very dangerous if you are then going to feed back mail to the zimbra server because our assumption is that if you ever modify zimbraMailTransport you will never touch zimbraMailHost - a key piece. Maybe we need a boolean on account to say zimbraMailTransport should not be automatically derived from zimbraMailHost for this account, but like I said before sounds to me like you should be running your SMTP filter in a different place.
Consider a chained content filter setup.
ie, do (a) postfix -> amavisd -> postfix -> your content filter -> postfix -> zimbra mailbox server.
do NOT (b) postfix ->amavisd -> postfix -> your filter -> zimbra mailbox
(a) is easy to do - look at the args passed to the return from amavisd -> postfix smtp and add a content_filter to it. Then add a new postfix smtpd to accept from your content_filter MTA.
This is a bit involved so you should carefully consult postfix docs on content filtering, master.cf and main.cf. Look for how to chain content filters on the web.
Note that the performance of chained filtering is sub-optimal. You should consider integrating your filter via amavisd-new if possible.