I front-end an exchange server using postfix, so I have a very similar setup at this end. A couple of things I noticed...
mydestination = $myhostname, localhost.$mydomain, localhost, 192.168.200.105
I'm being anal here, but if your domain name is being relayed to exchange, why is the ip address of the exchange box listed in my destination? This shouldn't cause a problem, but it doesn't make any since.
mynetworks = 127.0.0.0/8, 192.168.200.105, 192.168.200.0/24
Again, I'm being anal here, but the 192.168.200.0/24 covers the .105 address. So its not needed.
#relay_recipient_maps = hash:/etc/postfix/relay_recipients
Why is the relay_recipient_maps commented? Without this parameter, I do not see how postfix will know if a valid mailbox (recipient) exists on the exchange server. In short, postfix is going to relay any e-mail address for your domain ($relay_domains) to your exchange server. If the mailbox does not exist on exchange, then exchange will generate a DSN back to (99% of the time) a non-existant recipient. i.e. Dictionary attacks, which can clog up your exchange queues.
FWIW: I set the relay_recipient_maps to perform an LDAP query against exchange to verify the recipients mailbox actually exists. If it doesn't exist, postfix simply rejects the inbound e-mail at the envelope layer of the delivery process. i.e. It doesn't even read the DATA portion of the e-mail or even scan it for spam/virus.
If you are not comfortable with LDAP queries, then at least add every "valid" recipient in a file referenced by the relay_recipient_maps option. i.e.
relay_recipient_maps = hash:/etc/postfix/relay_recipients
In /etc/postfix/relay_recipients:TRANSPORT File
Hopefully, the above is a type-o. Based on my understanding of your post, the transport map should contain example.com. BTW: I do not list the .domain in my transport map. I only want to accept e-mail for firstname.lastname@example.org
, not email@example.com