Either your Junk filter is corrupt or you are just the victim of having your address posted all over the spam world. My original address spammed constantly and no matter how much I tried to get unsubscribed for every site, nothing worked. Junk filtering was a pain with so much spam coming in and I got tired of trying to create rules to filter good messages and junk bad messages. No matter what you do, when it's that bad, good messages get junked and bad ones always find a way to get through.
Try resetting your Junk filter. Open Mail preferences and be sure to check the correct boxes to eliminate your contacts and previous recipients from being marked as junk. Since it isn't working now, you have nothing to lose.
Once it's working, your contact list should be OK. If someone isn't in the contact list, sending a message to them will add them to the previous recipient list which will also be exempt from junk filtering.
As I said, once your email is receiving tons of spam, there isn't much you can do. After years of fighting that myself, I gave up on my old email address and created new ones. I leave the old one accessable as webmail and have everything going straight to the trash. I only keep it because it is my main account and I can't delete it from my provider.
Since doing this, I've asked all my contacts not to put me on open group mailing lists so my address won't get stolen again. Those that wouldn't do so have been asked to remove me from their contact list. I'm very careful on where is use my email and if anything is in question, I give out my old address. It's been several years now since I've done this and I don't get any spam email.
If yours is really bad enough, it's well worth the effort on just creating a new email address. It was a hassle for a while with a new address, but going from 60 junk messages a day to 1 every year was a blessing.