For those users who do not use WYGWAM take a look at CE String which elegantly solves this issue. (and lots more - a real swiss army chainsaw to use a Perl expression)
http://dvt.ee/cestring
In the custom method docs take a look at 'encode_email_script' or encode_email_bulk
http://www.causingeffect.com/software/expressionengine/ce-string/user-guide/custom_methods
To quote the docs for usage of 'encode_email_bulk':
{exp:ce_str:ing encode_email_bulk="script"}
Ut wisi <a href="mailto:example@example.com">Example</a> enim ad minim veniam, quis nostrud test@example.com.
{/exp:ce_str:ing}
Output:
Ut wisi <span data-eeEncEmail_GDleXCqLAm='1'>.(JavaScript must be enabled to view this email address)</span><script type="text/javascript">/*<![CDATA[*/var out = '',el = document.getElementsByTagName('span'),l = ['>','a','/','<',' 101',' 108',' 112',' 109',' 97',' 120',' 69','>','\"',' 109',' 111',' 99',' 46',' 101',' 108',' 112',' 109',' 97',' 120',' 101',' 64',' 101',' 108',' 112',' 109',' 97',' 120',' 101',':','o','t','l','i','a','m','\"','=','f','e','r','h','a ','<'],i = l.length,j = el.length;while (--i >= 0){out += unescape(l[i].replace(/^\s\s*/, '&#'));}while (--j >= 0){/**/if (el[j].getAttribute('data-eeEncEmail_GDleXCqLAm')){el[j].innerHTML = out;}}/*]]>*/</script> enim ad minim veniam, quis nostrud <span data-eeEncEmail_qxlETSuEFT='1'>.(JavaScript must be enabled to view this email address)</span><script type="text/javascript">/*<![CDATA[*/var out = '',el = document.getElementsByTagName('span'),l = ['>','a','/','<',' 46',' 109',' 111',' 99',' 46',' 101',' 108',' 112',' 109',' 97',' 120',' 101',' 64',' 116',' 115',' 101',' 116','>','\"',' 46',' 109',' 111',' 99',' 46',' 101',' 108',' 112',' 109',' 97',' 120',' 101',' 64',' 116',' 115',' 101',' 116',':','o','t','l','i','a','m','\"','=','f','e','r','h','a ','<'],i = l.length,j = el.length;while (--i >= 0){out += unescape(l[i].replace(/^\s\s*/, '&#'));}while (--j >= 0){/**/if (el[j].getAttribute('data-eeEncEmail_qxlETSuEFT')){el[j].innerHTML = out;}}/*]]>*/</script>