Akismet is the first plugin I install on any wordpress site (in fact, doesn't it come enabled by default these days?) - it does a great job of catching comment spam without me having to moderate every message. It was pretty clear however that it wasn't checking the forms from the Contact Form 7 plugin by default. On closer inspection it turns out that:
- there is good documentation on akismet and contact form 7
- when you mark any field to be checked by akismet, then you get the additional feature that all the fields in your form are concatenated together and checked as "content" by akismet as well
- the ordering of the directives in the contact form tags does matter, I needed mine before the watermark
At this point, things improved and akismet caught quite a lot of the spam - but not all. The things it couldn't catch were one-word clear nonsense entries - so I kept on looking and found the contact form 7 honeypot plugin.
The honeypot is a field which is designed to catch bots - they will typically fill in any field they see, regardless of whether they should do so or not! When you generate a honeypot field for your form, you get a field which is hidden and has the instruction "leave this field blank" in it. Humans can either not see it, or can read the instructions - but a spamming machine will fill it in. For better results, rename the field something other than "honeypot"; if you view the source on the contact form on the bottom of this page, you can see mine is called "country" - and that seems to work pretty well.
Given the ugliness and sheer unusability of the captcha, I am all in favour of other solutions and these worked well on my own site so I thought I'd share!