I'm a fan of the "hidden field" CAPTCHA. I don't remember where I read about it, but the idea is this:
- create your form as normal
- add an extra field but hide it (i.e.
style="display:none"
on the surrounding div or table row)
- after submission, if the field is blank, do the appropriate action (eg send an email); if the field has been filled in, then it's a robot submitter
The only case where this falls down is if the user's browser doesn't handle CSS (or they have it switched off), which is very rare.