如何在我的网站上呈现电子邮件地址而不被垃圾邮件发送者攻击,有什么最好的方法?

24

如何在我的网站上呈现电子邮件地址,而不会被垃圾邮件发送者攻击?

采用“foo at fooland dot com”这种方式并不是我寻找的解决方案。我需要以一种普通人可以理解的方式呈现它。

编辑

显示电子邮件是动态的。


@Ciwee:你使用的是哪种服务器技术? - Richard Ev
2
你正在和什么样的“普通人”打交道?我见过的每个人都能读懂像“at”和“dot”这样的单词。 - Cody Gray
4
请参考此链接:http://superuser.com/questions/235937/does-email-address-obfuscation-actually-work该链接讨论了电子邮件地址混淆的有效性。 - Trufa
1
由于超级用户问题的流行,这也很快将在superuser blog上发布博客。 - James Mertz
有什么方法可以保护这个问题不受垃圾邮件发送者的干扰吗? - Anwar Chandra
显示剩余3条评论
10个回答

23

最近,在superuser.com上有一个最新回答,通过比较一整套常用方法来解决这个确切的问题。



7

如何使用一个简单的图片来展示您的电子邮件地址?

生成该图片的技巧是在您的WebForms项目中添加一个ASP.NET MVC控制器,其中包含一个操作方法,该方法返回一个包含动态生成的图片及电子邮件地址的FileResult

public class DynamicImageController : System.Web.Mvc.Controller
{
    public FileResult Email(int id)
    {
        // TODO: Code that uses the ID value to retrieve the
        // email address for this customer (for example)
    }
}

在您的网页表单中,您可以使用图像服务器控件,并根据需要设置 ImageUrl (例如:“/ DynamicImage / Email /”+ customerId )。

此页面有一个示例,说明如何使用 FileResult 呈现图像(在这种情况下是一个图表)。 http://www.codeproject.com/KB/aspnet/MvcChartControlFileResult.aspx

那是一个解决方案,但我必须动态生成图像,因为呈现的电子邮件是动态的。如果我要生成,那么我更喜欢使用JavaScript方法。 - Andre Pena
+1 简单而有效。 - George Johnston
5
但对于需要使用该地址的人来说,缺点在于会带来一些麻烦。 - Sebastian Paaske Tørholm
是的,无法点击它,也无法复制它... 作为用户,除非我真的想给你发电子邮件,否则这将远远超出我的最大努力门槛。 - Blorgbeard

4

我开始使用的一种方法是CSS代码重定向:

<span style="unicode-bidi:bidi-override; direction: rtl;">moc.niamodruoy@uoy</span>

你可以使用某种字符串反转功能(取决于你使用的语言)将动态电子邮件地址插入页面中。
这是最简单和有效的方法之一。在此处查看其他一些方法:https://superuser.com/questions/235937/does-email-address-obfuscation-actually-work

2
如何进行JavaScript编码?可以使用以下PHP函数:
function encodeEmail ($email) {
  $ret = '';
  $a = '<a href="mailto:' . $email . '">' . $email . '</a>';
  $i = 0;
  $c = substr($a, $i, 1);
  while ($c != FALSE) {
    $ret .= '%'.dechex(ord($c));
    $c = substr ($a, ++$i, 1); 
  }
  return "<script type='text/javascript'>document.write(unescape('$ret'));</script>";
}

这段代码可能需要一些修正,因为我在编写时没有检查错误。


2
使用基于图像的方法的缺点是用户无法复制粘贴内容。我认为一种渲染电子邮件的JavaScript会很不错。如果它足够棘手,机器人可能无法(或不愿意)找到它。例如,假设您从图像开始(适用于所有人)。然后,如果用户单击它,某些JavaScript魔法将其变成可复制粘贴的文本。

另一个想法是在页面加载2秒后用文本替换图像。如果机器人匆忙(他们通常会吗?),它们只会看到图像。此外,如果用户迅速尝试在替换之前选择图像,则JavaScript可以立即触发并将其替换为正确的文本。使用mouseover或click事件等内容。

1
JavaScript是我倾向的解决方案。我愿意将电子邮件呈现为foo-at-fooland-dot-com,并在标记下方放置一个JavaScript块,将其转换为foo@fooland.com。它可以复制粘贴,看起来很好。 - Andre Pena
@Ciwee:虽然我的解决方案与你的不同,但我认为将名称-at-domain-dot-com显示出来,并使用JavaScript动态更改为普通(可点击)的mailto链接是一个很好的想法。感谢你的启发,我一定会为自己的网站编写这样的脚本 :) - mingos

2
<a href="mailto:email@example.org">email@example.org</a>

在我看来,这些解决方案都不值得给用户带来额外的麻烦。

垃圾邮件过滤器现在非常好用(我在gmail中几乎没有收到任何垃圾邮件,而且我总是直接使用我的电子邮件地址),如果你想要触达更广泛的受众,你的优先考虑应该是他们的舒适度,而不是你的。

也许这是一个主观的问题 :)


我同意。我的电子邮件地址已经在我的网页、域名的联系数据以及许多网站上公布了至少5年,但我从未有过一天需要标记超过2或3个垃圾邮件。我的收入依赖于这些联系方式,所以我不会冒险。 - AJJ

0

如果您不介意用户无法复制,请使用图像方法。

您可以使用JavaScript从您喜欢的某些随机算法构建地址。您还可以将其放在alert()中,这仍然可以复制,但您的电子邮件地址永远不会触及DOM。


0
更好的方法是像谷歌群组一样,他们不会显示您的实际电子邮件ID,只显示开头,但是,如果您是人类,您可以使用验证码方法验证访问者是否为人类或机器人。 此外,您可以在系统中嵌入声音文件或基于Flash的显示屏,以显示您的电子邮件ID。您可以创建一些ActionScript Flash,它看起来很好,有吸引力,也能达到目的。 我认为声音或闪存都很好看。您甚至可以创建一个动态图像,每次用户重新加载页面时都会更改。 祝你好运!

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接