I'm amazed nobody has mentioned Spamcop. I've been using it for years, and am very pleased with it.
It does several things: first, all mail to my "published" address gets forwarded to my Spamcop address. That checks it against the Spamcop and several other "blacklists" plus my own blacklist and whitelist. Mail that passes that is forwarded to my "secret" address and comes in with the incoming mail.
Everything that fails is held on Spamcop, and once a day or so I check the list - just read the sender name and subject - and usually click "Select All" and "Report". That analyses the headers and sends a formal complaint back to the originating ISP. Most originating ISPs are in the USA (particularly prolific spamsources are Attbi.com, Bell.ca, RR.com and Verizon) or in China/Japan/Korea/Brazil. Most of those completely ignore Spamcop reports, but at least something is done.
I don't download the offending Spam at all so save my connect charges.
I get the occasional false "positive" such as when AOL or Compusmurf gets blacklisted, and the very very occasional Spam gets through. That's rare.
Spamcop can also be configured to collect your mail from POP mailboxes if your ISP doesn't allow forwarding.
I've never tried the other methods suggested here, because Spamcop does it for me.
There is one snag - Spamcop's "header parsing" is very aggressive, and will pick your ISP as the Spam source if the ISP's reverse DNS is misconfigured. I've had to do some nagging to get that fixed at a certain ISP that shall be nameless...