避免垃圾邮件机器人






4.74/5 (32投票s)
2004年8月26日
2分钟阅读

134569

753
防止垃圾邮件机器人从网页上收集电子邮件地址。
引言
垃圾邮件机器人扫描网络并从网页、新闻组和其他来源收集电子邮件地址。 本文向您展示了一种您可以在网页中使用的简单技术,以避免垃圾邮件机器人。 这个想法被用在了我创建的 FotoVision 示例 中,但我认为在 FotoVision 示例之外讨论这个特定部分会很有用。 这个想法很简单; 并非将真实的电子邮件地址存储在 HTML 中,而是存储地址的编码版本,并在客户端需要时进行解码。
步骤 1. 编码电子邮件地址
首先,需要对电子邮件地址进行编码。 编码后的字符串可以在服务器上预先计算或动态计算。 以下函数使用 BitConverter
类将电子邮件地址 derf@example.com 编码为字符串 64657266406578616D706C652E636F6D
。
// C#
string EncodeEmailAddress(string email)
{
return BitConverter.ToString(
ASCIIEncoding.ASCII.GetBytes(email)).Replace("-", "");
}
' VB.NET
Function EncodeEmailAddress(ByVal email As String) As String
Return BitConverter.ToString( _
ASCIIEncoding.ASCII.GetBytes(email)).Replace("-", "")
End Function
步骤 2. 在 HTML 中使用编码后的电子邮件
不要在 HTML 链接中使用真实的电子邮件地址,而要使用编码后的值。 例如
<a href="javascript:sendEmail('64657266406578616D706C652E636F6D')">Email Derf</a>
我考虑过使用 HTML 编码电子邮件地址,但我认为垃圾邮件机器人更有可能处理该值,使用自定义编码算法是更好的解决方案。
步骤 3. 在客户端解码电子邮件地址
客户端函数 sendEmail
在客户端被调用; 这个函数解码电子邮件地址并显示电子邮件应用程序。 sendEmail
函数包含以下内容
// open the client email with the specified address
function sendEmail(encodedEmail)
{
// do the mailto: link
location.href = "mailto:" + decodeEmail(encodedEmail);
}
// return the decoded email address
function decodeEmail(encodedEmail)
{
// holds the decoded email address
var email = "";
// go through and decode the email address
for (i=0; i < encodedEmail.length;)
{
// holds each letter (2 digits)
var letter = "";
letter = encodedEmail.charAt(i) + encodedEmail.charAt(i+1)
// build the real email address
email += String.fromCharCode(parseInt(letter,16));
i += 2;
}
return email;
}
就是这样,现在 derf@example.com 不会被垃圾邮件机器人拾取,因为文本从未出现在 HTML 中,但电子邮件链接仍然像预期的那样工作(点击时会显示带有正确地址的电子邮件程序)。
步骤 4. 可选地,更新状态区域
您可以通过处理 mouseover
和 mouseout
事件来扩展链接,以在状态区域中显示电子邮件地址。 更新后的 HTML 链接如下所示
<a href="javascript:sendEmail('64657266406578616D706C652E636F6D')"
onmouseover="javascript:displayStatus('64657266406578616D706C652E636F6D');
return true;" onmouseout="javascript:clearStatus(); return true;">
Email Derf</a>
并且两个函数被添加到客户端脚本中
// display the email address in the statusbar
function displayStatus(encodedEmail)
{
window.status = "mailto:" + decodeEmail(encodedEmail);
}
// clear the statusbar message
function clearStatus()
{
window.status = "";
}
现在,当鼠标移动到链接上时,真实的电子邮件地址将显示在状态区域中。
示例代码和编码网页
示例代码中有两个文件。 文件 email.js 包含您可以包含在您的 HTML 页面中的客户端脚本函数。 文件 test.html 是一个使用 email.js 文件的示例 HTML 页面。
编码后的电子邮件地址可以在服务器上动态计算,但这并非必需的,您也可以预先计算编码后的电子邮件并在 HTML 中使用该值。 我创建了一个 编码网页,它编码您可以在 HTML 代码中粘贴的电子邮件地址。 如果您的站点包含大量电子邮件链接,那么创建一个接受电子邮件地址并发出包含编码链接的 HTML 的控件会很容易。