an old trick for this type of thing, at least to know "how" and "who" is sharing your info is to obtain your own domain name with multiple email addresses.
when you shop at amazon you use the email addy
amazon@mydomain.com
when you book your smart reservation you use
smart@yourdomain.com
when you do your online banking you use
bank@yourdomain.com
when you buy something from ebay you use
ebay@yourdomain.com
when you communicate with relatives you use
yourname@yourdomain.com
for your forum you use **********@yourdomain.com
and so on. each time you create a new relationship online, you create an email to go with it. you can have each of the aliases forward to one email account if it makes it easier.
then.
when you get spammed in email, you can see which email address it is being sent to, and because the email address is coded by you to a certain website or service provider, you'll know who has shared your info and who to dispute with.
most cheap domains support unlimited email aliases and 100 or more POP accounts for very short money.
it's a good system. especially if you do alot of business/recreation online.