如何在网站上列出“联系我们”电子邮件地址,但减少垃圾邮件的可能性?


70

什么是在网站上列出“联系我们”电子邮件地址,同时降低其被垃圾邮件可能性的好方法?

将电子邮件地址放在图像中是最好的技术,还是还有其他技术?


35
请注意,击败机器人的任何事物也可能会击败视力障碍的用户
MrChrister 2010年


@MrChrister ...白色打败了用户,但没有击败机器人。
Talvi Watia'9

2
原来……有人安装了一个蜜罐,并在更长的时间内收集了结果。结果如下…… superuser.com/questions/235937/ … 。显然,使用CSS更改地址的方向和/或在电子邮件地址中插入任意隐藏的代码是最好的解决方案。显然,OCR在spambot工具箱中并不常见。
Evan Plaice

har,我什至不记得我在这里回答了一个与超级用户类似的问题:)
akira

Answers:


54

我通过一个一次性的Gmail帐户传递所有联系表格,该帐户将邮件转发到真实的电子邮件地址。它是免费的,而且很容易,而且Gmail的垃圾邮件检测是一流的。

制作网站时不需要额外的精力,如果您遇到任何麻烦,只需登录Gmail帐户并将其标记为垃圾邮件即可。

然后,您可以将Gmail收件箱设置为自动存档已转发的任何内容,或者如果您不想在此保留多余的副本,甚至可以将其删除。


2
我有一个以类似方式使用的Google Apps帐户。与Gmail帐户相比,Google Apps的优势在于,每个帐户最多可以创建50个电子邮件别名(昵称)。我曾经使用Gmail帐户来进行此类操作,但一年后我总是会忘记登录信息,而使用Google Apps则更让人痛苦。(仍然是一项很棒的技术。+ 1)
jessegavin 2010年

+1,但我看到一个缺点-有些人会信任您自己域中的电子邮件,而不是使用免费电子邮件提供商的一种设置。

6
拉兹洛:我应该更加清楚。起初我遇到了这个问题,所以我目前使用该网站的域设置邮件重定向,该邮件重定向到Gmail帐户,再转发到我的个人电子邮件地址(这是另一个Gmail帐户),并用标签定义了哪个网站它来自并跳过收件箱。人们认为,他们通过电子邮件发送info@mydomain.com或contact@myotherdomain.com,但他们都来我的主要的Gmail帐户,坐在标签MYDOMAIN,myotherdomain等
卡伦

1
Gmail还允许您使用已验证的电子邮件地址进行回复。因此,您可以在gmail内部以“ roy@royronalds.com”作为响应,尽管实际电子邮件中会指定一些细微的区别,例如“由roy@gmail.com代表roy@royronalds.com发送”。几乎没有人会注意到您使用gmail进行发送,就像从其他地址发送邮件一样。
Kzqai 2010年

@Lazlow阅读以上@jessegavin评论
Sruly 2010年


20

我的不答案是不要这样做。GMail和梭子鱼反垃圾邮件设备等现代电子邮件系统在过滤垃圾邮件方面做得非常出色。您与访问者之间设置的任何障碍都意味着较低的参与度,并且根据网站类型的不同,可能会造成销售损失。

如果您担心未安装本机邮件客户端的用户或未正确设置mailto:处理程序的用户,则可以在“联系我们”页面中同时使用链接的电子邮件地址和表格(无验证码),并让用户选择。

垃圾邮件很烦人,但这是我们的负担,而不是我们的用户。


18

使用自然语言拼写电子邮件地址...

例如:

thatguy at gmail dot com

与编写只搜索@符号和正则表达式的普通地址的机器人相比,编写可以区分自然语言的机器人要困难得多,您会感到惊讶。

它不是百分百的万无一失,但它并没有比混淆更糟,并且不会疏远您的视力障碍用户和/或禁用JavaScript的用户。

更新:这是此技术的实际应用示例

更新2:

事实证明,实际上有人对此进行了研究并将其发布在网上。请参阅描述结果SuperUser帖子原始文章。


6
我倾向于质疑这种方法。主要是因为它已经存在了很长时间,而且我无法想象在过去十年中开发的任何电子邮件爬虫都不会通过替换“ at”,“ [at]”,“ dot”或类似内容来启动每个新页面与他们各自的角色。
hultqvist 2010年

@phq为什么?是否很难相信没有其他爬虫能够通过为页面拍摄快照,运行OCR和@的正则表达式来击败所有JavaScript并编码混淆选项?仅仅因为有可能创建一个可以解决所有这些问题的漫游器,并不意味着垃圾邮件发送者就可以了。使用自然语言的优点是它的使用比标准电子邮件URI更加多样化。@符号通常不会。
Evan Plaice 2010年

2
@Evan,我的意思是,这种技术变得太普遍了,通常在打击垃圾邮件时会遇到问题。我声称这种技术不是自然语言技术,就像“用tld com和用户名foo给我发邮件给域示例”。“ at”技术仅是一种符号替换技术。
hultqvist 2010年

@phq我认为廉价的JavaScript模糊处理技术已经存在很久了,而且很容易破解。关键是,它不会从页面抓取电子邮件中消除页面抓取工具,但会像问题所建议的那样“降低可能性”。另外,这是最容易实现的选项,而不会疏远您的用户。我看不出您的观点如何使这一选择比其他任何选择更糟糕。
Evan Plaice

1
我也看到过thatguy funny-symbol gmail.com
rlb.usa 2010年

12

就个人而言,我不会在网站上显示电子邮件地址,而是具有易于使用,可访问的“与我们联系”表单,以及指示电子邮件来自何方的信息;允许用户向网站所有者和运营商发送电子邮件,而无需暴露电子邮件地址或无需跳过各种JavaScript圈等。

如果您的垃圾邮件过滤功能不那么复杂,通常这是最好的方法。


2
现在有很多垃圾邮件发送者都填写了此类联系表格。
txwikinger 2010年

4
我从不填写联系表格。如果找不到联系人电子邮件,那么我根本就不与该公司做生意。现在,如果对我来说这是必须的并且没有联系电子邮件,我更喜欢通过电话打电话,甚至是国际电话。联系人表格的问题是我永远无法确定他们是否会将键入的信息的副本转发到我的电子邮件地址,因此,我不得不将信息复制粘贴到某个位置以跟踪详细信息。
vmarquez 2010年

@vmarquez:足够公平。如果也可以选择将邮件转发到您的地址,您会感到高兴吗?我有许多客户希望让他们的用户以一种可访问的,非JS启用的方式向他们发送电子邮件,而又不将其电子邮件地址暴露给垃圾邮件发送者。他们的网站上确实有他们的电话号码,因此您可以通过这种方式与他们联系;出于好奇,您是否也记录了与公司的通话记录以保持跟踪(看到最多的人声称要记录下来进行培训)?
Zhaph-Ben Duguid 2010年

2
@Zhap:对的,如果表格中的页面上有注释,表明我将通过电子邮件获得我的请求,我很高兴。一些网站包括该说明​​,我使用该表格。对于需要通过电话致电的情况,在通话过程中不会执行我的请求。我要求发送电子邮件,然后继续发送电子邮件。我更喜欢通过电子邮件进行初始联系,因为我倾向于代表许多客户进行产品/服务研究,因此我会详细记录每种情况下的要求/回答。
vmarquez 2010年

@vmarquez:您不能填写表格,然后将填写的表格保存/打印为PDF吗?
Andrew Grimm'3

9

使用css从真实文本中隐藏一些噪声(仅在一行中,我对其进行了格式化以更好地说明该技术):

u<span class="spam">noise</span>ser
@<span class="spam">noise</span>
example<span class="spam">noise</span>
.com

然后使用以下css-snippet:

.spam { display: none; }

如果您需要有效的mailto:内容,则必须通过dom中的jscript进行创建,请参见其他答案。但我不是那个大朋友。


这对选择文本有用吗?
AndreiRînea'10

2
由于屏幕阅读器倾向于忽略样式表,因此无法访问。
DisgruntledGoat 2010年

8

我要做的是将电子邮件地址写为单词,并用span标签包裹起来<span class="email">joe dot blow at gmail dot com</span>。然后运行页面级脚本,抓取所有此类跨度并将其替换为构造的电子邮件链接。它可能不太模糊,但我没有任何抱怨。另外,如果禁用了JavaScript,则用户仍然可以读取实际的跨度文本。


对于好的机器人来说,这不会有太大帮助。如果该机器人运行JavaScript(这不是一件大事-在浏览器引擎中运行页面并获取生成的HTML),那么它具有完美的地址。在gmail点com上捉住某人并不比在某人上捉住难一点
Mircea Chirea 2010年

8

最佳解决方案:使用垃圾邮件过滤器

实际上,我使用Gmail来处理我的企业的POP3电子邮件帐户,因为在其他计算机上检查电子邮件要容易得多。Gmail的垃圾邮件过滤器是世界上最好的。

因此,您只需将webmaster@example.com显示为您的电子邮件地址,而不必担心垃圾邮件。


+1,垃圾邮件刺客还可以调整为对不想使用Google的用户极为有效。
Tim Post

7

使用类似的html编码&#649&#7854&#7575,浏览器会将其呈现为“ abc”


1
我以前使用过这种技术,并且看起来效果很好。它对用户也是透明的,并且不依赖JavaScript :)
Michael Mior 2010年

编写一个机器人来解析该文本将是一件非常痛苦的事情。另一方面,很明显这是一个电子邮件地址或一个敏感的东西。
Mircea Chirea 2010年

实际上,编写一个机器人来解析HTML实体真的很容易。解密编码的文本是计算机可以很容易地完成的事情,但是人类却遇到了很多麻烦(这就是为什么您的浏览器为您做到这一点)。这就是为什么这种方法仍然有效的原因。
冒犯君主

5

使用图形库(例如PHP支持的GD或类似文件)动态创建包含电子邮件地址的.png图像。

与我的其他答案相比,该解决方案对用户而言不那么烦人(但不是透明的;他们不能复制并粘贴它,但必须从头开始重新键入它),但安全性也较低:计算机可以读取清晰的图像。

但是总的来说,我认为这是一个很好的妥协。它将阻止绝大多数垃圾邮件机器人。


这也将使绝大多数用户烦恼。无需单击,无需复制粘贴,亲爱的,谢谢,这在像电话这样的小型设备上尤其令人讨厌,在该设备上您无法真正快速键入。
Mircea Chirea

5

一种不错的方法(虽然不是完美的方法)是通过javascript创建电子邮件地址。大多数搜寻电子邮件的蜘蛛不会执行javascript,因此找不到可读的电子邮件地址。

只是一个例子。


3
没有启用JavaScript的用户呢?
Evan Plaice

1
@Evan:在21世纪,谁会禁用JavaScript,除了那些罕见的从生产盒中浏览Web的系统管理员之外?;-)
Chris W. Rea 2010年

1
@Chris,如果要从需要Java 的网站(例如该网站)中获取特定信息,我只会打开Javascript(或Cookie )。当然,我可能是我的最后一个……:)
独眼巨人

5

我使用一个简单的Python脚本将电子邮件地址转换为mailto链接,其中电子邮件地址是HTML实体编码的。这对用户是完全透明的,但是似乎掩盖了内容,足以打败大多数头脑简单的收割机器人。

#! /usr/bin/env python3.0

def entity_encode(text):
    out = ""
    ba = text.encode()
    for i in range(len(ba)):
        out = out + "&#x{0:02x};".format (ba[i])
    return out

def print_email_link(address) :
        print('<!-- {0} -->'.format(address))
        print('<a href="{0}{1}">{1}</a>'.format(entity_encode("mailto:"), entity_encode(address)))


print_email_link("test123@example.com")

这给出了输出

<!-- test123@example.com -->
<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x74;&#x65;&#x73;&#x74;&#x31;&#x32;&#x33;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;">&#x74;&#x65;&#x73;&#x74;&#x31;&#x32;&#x33;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;</a>

将结果粘贴到网页中时,浏览器将文本“ test123@example.com”显示为“ mailto:test123@example.com”的超线,因此对于最终用户而言,与包含地址一样方便在清楚。但这似乎击败了许多收割机器人。

显然,将模糊的电子邮件链接粘贴到网页的HTML源代码中的相应位置后,我将删除地址的纯ASCII版本的注释。


4

在向用户显示电子邮件地址之前(或让您提交联系表单之前,请先让用户解析验证码)。

对用户来说这是最烦人的,但绝对是最有效的。


9
我不知道哪个更烦人,必须输入验证码或单击电子邮件链接以获取Outlook Express设置向导。这显然取决于听众,但我认为联系方式是必经之路。
加百利

@Gabriel:验证码绝对很烦人,但我完全同意。我希望人们停止使用mailto。如今,通过服务器直接发送电子邮件已经足够容易了。
奥马尔·科尔

1
CAPTCHA不是恕我直言的解决方案。不要因为其他人的罪行而惩罚用户。如果有其他解决方案,您将给用户带来负担。
vmarquez 2010年

3

我很困惑,因为电子邮件地址实际上是使用Javascript呈现的。

例如,my@email.com可以呈现为

<a href="javascript:location='mailto:\u006d\u0079\u0040\u0065\u006d\u0061\u0069\u006c\u002e\u0063\u006f\u006d';void 0">
<script type="text/javascript">document.write('\u006d\u0079\u0040\u0065\u006d\u0061\u0069\u006c\u002e\u0063\u006f\u006d')</script></a>

就用户而言,它是普通文本,可以复制和粘贴。另一方面,机器人将很难。

这是我使用的混淆器。


您也可以使用<a href="#" onclick="document.location.href='mailto:...'; return false">
马克·亨德森

但是,如果没有JS,这两个解决方案将无法正常运行,对吗?
格兰特·

2

单程:

  <script language="javascript"> 
  <!--
  var name = "user"
  var host1 = "gm"
  var host2 = "ail.com"
  var addr =
  document.write("<a href=mai" + "lto:" + 
    name + "&#64;" + host1 + host2 +
    ">" + name + "&#64;" + host1 + host2 + "</a>")
  //-->
 </script> 

您可以在<noscript>标记为关闭了JavaScript的用户的代码中写“解密我的电子邮件:com点gmail的用户” 。这样,您可以获得超链接功能。您有很大的机会避免垃圾邮件发送者离开您的地址,并且关闭了javascript或仅纯文本浏览器的人仍可以获取您的电子邮件地址。


我对多个变量使用相同的变量-对于我来说,对于一个机器人来说,将各个值拼凑起来似乎比较困难。

2

如果您有很多人与您联系,那么从长远来看,世界上所有的混淆技术都无济于事。它所要做的就是让某人向您发送消息,然后被某些恶意软件感染,这些恶意软件会扫描他们的收件箱/已发送邮件/通讯录/任何有效地址,然后您的地址就从列表传递到列表[我什也有联系人他们出于最愚蠢的原因而愚蠢到无法将电子邮件地址和密码放入在​​线表格,您可能也有,最近的一个网站提供了计算某人的“电子邮件占星图和预测”的功能,该网站立即将所有愚人与同一个网站和<deity>的邀请的联系人只知道结果导致我们现在还有哪些其他列表

我的公共网站上的地址不仅仅是一个一次性的地址,而是一个一次性的子域。如果我开始在该子域上收到垃圾邮件,则创建一个新的垃圾邮件,更新列出我的联系方式的站点,然后不久,我将其从DNS记录中完全删除。如果您执行此操作,或使用其他任何一次性地址技术,请确保(在列出该地址的任何页面上以及使用该地址发送的任何邮件的页脚中)清楚表明该地址将来会更改,并且人们可以他们打不通,应该再回来检查以确保他们有正确的地址。

这样做的好处是,用户只需单击一个简单的地址(如果他们的浏览器+邮件程序是通过这种方式链接的)或复制+粘贴即可,而无需随后动脑筋编辑地址(我总是对其他的地址感到惊讶聪明,细心的人无法正确地解决这类问题)。这也意味着我的邮件服务器没有时间花时间来退回已过期子域中发送到“随机”地址(aaron @,adam @,amy01 @ ...)的邮件。它还不会混淆盲人或位置不佳的人所使用的屏幕阅读器。

我还没有尝试过的另一个选择是使用AJAX请求读取电子邮件地址和其他详细信息。这可能比document.write基于模糊处理稍微有效,但是会在Web服务器上增加一点额外的负载。

我曾经使用“联系我/我们”表单来代替,但是我发现它们的垃圾邮件数量甚至超过纯文本电子邮件地址-有时是脚本试图使用该表单在某个地方而不是某个地方创建帐户使用它作为联系表格。


1

如果您具有漫游器过滤器(使用1x1px,子网,已知的漫游器,jscript检测,http引荐来源网址和浏览器代理),则如果它是漫游器,则根本无法显示信息。

PHP解决方案:

<?
if (!isbot()) {
  echo 'mailto:'.$email_address_for_real_people;
  }
  else {
  echo 'mailto:yourself_bot@'.$bots_domain_address;
  }
?>

顺便说一句,isbot()是用户创建的函数,它指向您拥有的所有机器人过滤器例程。
Talvi Watia 2010年

1

我发现最简单的方法是使用具有默认地址的联系表,但也可以让用户选择通信对象(营销,销售,技术支持等)。然后,基于下拉列表的值,服务器将已发送的表单数据发送到适当的电子邮件地址。

从数据库表中运行此联系人列表,以便您可以轻松地将条目更新/添加到下拉列表中。这样,您就永远不会向垃圾邮件机器人这个广阔的世界公开任何地址,并且仍然为您的用户提供了一种发送反馈的好方法。


1

想都别想!-是的,何塞!

绝对没有办法“停止” a href="mailto:" 电子邮件地址的获取。长期以来,人们一直认为使用JavaScript是阻止大多数收获机器人的一种好方法,但是如今,机器人非常擅长于击败这种方法。他们还可以击败包含电子邮件地址的图像,就像他们可以使用decaptcha软件击败验证码一样。

更好的方法!

更好的方法是使用提供良好垃圾邮件阻止功能的信誉良好的邮件服务。Google G SuiteMicrosoft Office 365使用的算法无法与市场上的任何软件匹敌,主要是因为它们每天会收到数百万封电子邮件,并且能够在甚至试图向您发送电子邮件之前就“学习”并将其列入黑名单。

实际上,一年前Google表示,其机器学习技术现在可以阻止99.9%的Gmail垃圾邮件和网络钓鱼邮件,运行在plesk / cpanel后面的本地Microsoft Exchange和邮件服务器无法与这种保护竞争。

摘要

通过使用信誉良好的邮件服务来阻止垃圾邮件,该服务能够进行AI机器学习。您还可以采取进一步措施,阻止垃圾邮件发送者使用Cloudflare访问您的网站,Cloudflare会在绝大多数攻击性机器人到达您的站点之前对其进行检测。


0

我已经使用fred@no-spam.domain.com多年了。用户通常了解足以删除“无垃圾邮件”。

否则,我只使用带有“验证码”的联系表,然后直接从网站发送邮件。


4
我很惊讶您的用户知道足够删除“无垃圾邮件”。通常,假设用户能够思考向前一步会导致非常灾难性的结果。除非您添加一些指示我这样做的便笺,否则我不会删除无垃圾邮件(即使在这种情况下,很多人也不会读便笺,弹出窗口...)。
奥马尔·科尔

7
您如何知道您的用户知道删除“无垃圾邮件”?您只会听到做这件事的人的声音:¬)
pelms

1
@pelms:好点,但是有些人认为这是一个优势。它可以作为筛选您收到的邮件的情报筛选器...
David Spillett

0

这是另一封电子邮件混淆器:来自Dan Benjamin的Enkoder。它既是在线应用程序又是Mac的独立应用程序。


0

我要做的一件事是使用http://www.stopforumspam.com上的API 检查垃圾邮件发送者。请随时与我联系以获取详细信息,我们将很乐意为您提供帮助!

芽曼兹

曼兹网页设计有限公司



0

我使用PHP函数生成一些JavaScript,以在运行时输出脚本。请注意,您不需要 PHP在运行时生成JS,您可以在本地生成一次JS,然后在页面中包含静态JS。

您还可以在下面的代码片段中使用链接功能,以自动混淆给定HTML中的电子邮件地址(其中$ processedContent是HTML):

 $emailMatches = array();
 $matchCount = preg_match_all('/(?:[a-zA-Z0-9_\.\-])+\@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+/', $processedContent, $emailMatches);

 if($matchCount > 0) {
    $emailMatches = $emailMatches[0];

    foreach($emailMatches as $email) {
    $replacement = createJSMailLink($email);

    $processedContent = str_replace($email, createJSMailLink($email), $processedContent);
 }
}

0

如果您使用的是联系表格,则可以使用将随机名称用作输入的有趣技巧。

例如,我创建一个联系表单,而不是使用电子邮件作为输入,而是使用liame(与名称(eman)和注释(tnemmoc)相同)。机器人实际上并不知道这些输入的作用,因此它们只是无视它们。


0

我已经建立了一个Google文件表格/试算表。我可以每天检查一次表单条目,收件箱也不会被淹没。


0

使用Zoho Creator设置联系表单。您收到的反馈将存储在您可以在线访问的数据库中,并且还将通过电子邮件发送给您。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.