什么是在网站上列出“联系我们”电子邮件地址,同时降低其被垃圾邮件可能性的好方法?
将电子邮件地址放在图像中是最好的技术,还是还有其他技术?
什么是在网站上列出“联系我们”电子邮件地址,同时降低其被垃圾邮件可能性的好方法?
将电子邮件地址放在图像中是最好的技术,还是还有其他技术?
Answers:
我通过一个一次性的Gmail帐户传递所有联系表格,该帐户将邮件转发到真实的电子邮件地址。它是免费的,而且很容易,而且Gmail的垃圾邮件检测是一流的。
制作网站时不需要额外的精力,如果您遇到任何麻烦,只需登录Gmail帐户并将其标记为垃圾邮件即可。
然后,您可以将Gmail收件箱设置为自动存档已转发的任何内容,或者如果您不想在此保留多余的副本,甚至可以将其删除。
使用自然语言拼写电子邮件地址...
例如:
thatguy at gmail dot com
与编写只搜索@符号和正则表达式的普通地址的机器人相比,编写可以区分自然语言的机器人要困难得多,您会感到惊讶。
它不是百分百的万无一失,但它并没有比混淆更糟,并且不会疏远您的视力障碍用户和/或禁用JavaScript的用户。
更新:这是此技术的实际应用示例。
更新2:
事实证明,实际上有人对此进行了研究并将其发布在网上。请参阅描述结果的SuperUser帖子或原始文章。
thatguy funny-symbol gmail.com
就个人而言,我不会在网站上显示电子邮件地址,而是具有易于使用,可访问的“与我们联系”表单,以及指示电子邮件来自何方的信息;允许用户向网站所有者和运营商发送电子邮件,而无需暴露电子邮件地址或无需跳过各种JavaScript圈等。
如果您的垃圾邮件过滤功能不那么复杂,通常这是最好的方法。
使用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进行创建,请参见其他答案。但我不是那个大朋友。
我要做的是将电子邮件地址写为单词,并用span标签包裹起来<span class="email">joe dot blow at gmail dot com</span>
。然后运行页面级脚本,抓取所有此类跨度并将其替换为构造的电子邮件链接。它可能不太模糊,但我没有任何抱怨。另外,如果禁用了JavaScript,则用户仍然可以读取实际的跨度文本。
使用类似的html编码ʉẮᶗ
,浏览器会将其呈现为“ abc”
使用图形库(例如PHP支持的GD或类似文件)动态创建包含电子邮件地址的.png图像。
与我的其他答案相比,该解决方案对用户而言不那么烦人(但不是透明的;他们不能复制并粘贴它,但必须从头开始重新键入它),但安全性也较低:计算机可以读取清晰的图像。
但是总的来说,我认为这是一个很好的妥协。它将阻止绝大多数垃圾邮件机器人。
一种不错的方法(虽然不是完美的方法)是通过javascript创建电子邮件地址。大多数搜寻电子邮件的蜘蛛不会执行javascript,因此找不到可读的电子邮件地址。
这只是一个例子。
我使用一个简单的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="mailto:test123@example.com">test123@example.com</a>
将结果粘贴到网页中时,浏览器将文本“ test123@example.com”显示为“ mailto:test123@example.com”的超线,因此对于最终用户而言,与包含地址一样方便在清楚。但这似乎击败了许多收割机器人。
显然,将模糊的电子邮件链接粘贴到网页的HTML源代码中的相应位置后,我将删除地址的纯ASCII版本的注释。
在向用户显示电子邮件地址之前(或让您提交联系表单之前,请先让用户解析验证码)。
对用户来说这是最烦人的,但绝对是最有效的。
我很困惑,因为电子邮件地址实际上是使用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">
单程:
<script language="javascript">
<!--
var name = "user"
var host1 = "gm"
var host2 = "ail.com"
var addr =
document.write("<a href=mai" + "lto:" +
name + "@" + host1 + host2 +
">" + name + "@" + host1 + host2 + "</a>")
//-->
</script>
您可以在<noscript>
标记为关闭了JavaScript的用户的代码中写“解密我的电子邮件:com点gmail的用户” 。这样,您可以获得超链接功能。您有很大的机会避免垃圾邮件发送者离开您的地址,并且关闭了javascript或仅纯文本浏览器的人仍可以获取您的电子邮件地址。
如果您有很多人与您联系,那么从长远来看,世界上所有的混淆技术都无济于事。它所要做的就是让某人向您发送消息,然后被某些恶意软件感染,这些恶意软件会扫描他们的收件箱/已发送邮件/通讯录/任何有效地址,然后您的地址就从列表传递到列表[我什至也有联系人他们出于最愚蠢的原因而愚蠢到无法将电子邮件地址和密码放入在线表格,您可能也有,最近的一个网站提供了计算某人的“电子邮件占星图和预测”的功能,该网站立即将所有愚人与同一个网站和<deity>的邀请的联系人只知道结果导致我们现在还有哪些其他列表。
我的公共网站上的地址不仅仅是一个一次性的地址,而是一个一次性的子域。如果我开始在该子域上收到垃圾邮件,则创建一个新的垃圾邮件,更新列出我的联系方式的站点,然后不久,我将其从DNS记录中完全删除。如果您执行此操作,或使用其他任何一次性地址技术,请确保(在列出该地址的任何页面上以及使用该地址发送的任何邮件的页脚中)清楚表明该地址将来会更改,并且人们可以他们打不通,应该再回来检查以确保他们有正确的地址。
这样做的好处是,用户只需单击一个简单的地址(如果他们的浏览器+邮件程序是通过这种方式链接的)或复制+粘贴即可,而无需随后动脑筋编辑地址(我总是对其他的地址感到惊讶聪明,细心的人无法正确地解决这类问题)。这也意味着我的邮件服务器没有时间花时间来退回已过期子域中发送到“随机”地址(aaron @,adam @,amy01 @ ...)的邮件。它还不会混淆盲人或位置不佳的人所使用的屏幕阅读器。
我还没有尝试过的另一个选择是使用AJAX请求读取电子邮件地址和其他详细信息。这可能比document.write
基于模糊处理稍微有效,但是会在Web服务器上增加一点额外的负载。
我曾经使用“联系我/我们”表单来代替,但是我发现它们的垃圾邮件数量甚至超过纯文本电子邮件地址-有时是脚本试图使用该表单在某个地方而不是某个地方创建帐户使用它作为联系表格。
如果您具有漫游器过滤器(使用1x1px,子网,已知的漫游器,jscript检测,http引荐来源网址和浏览器代理),则如果它是漫游器,则根本无法显示信息。
PHP解决方案:
<?
if (!isbot()) {
echo 'mailto:'.$email_address_for_real_people;
}
else {
echo 'mailto:yourself_bot@'.$bots_domain_address;
}
?>
isbot()
是用户创建的函数,它指向您拥有的所有机器人过滤器例程。
想都别想!-是的,何塞!
绝对没有办法“停止” a href="mailto:"
电子邮件地址的获取。长期以来,人们一直认为使用JavaScript是阻止大多数收获机器人的一种好方法,但是如今,机器人非常擅长于击败这种方法。他们还可以击败包含电子邮件地址的图像,就像他们可以使用decaptcha软件击败验证码一样。
更好的方法!
更好的方法是使用提供良好垃圾邮件阻止功能的信誉良好的邮件服务。Google G Suite和Microsoft Office 365使用的算法无法与市场上的任何软件匹敌,主要是因为它们每天会收到数百万封电子邮件,并且能够在甚至试图向您发送电子邮件之前就“学习”并将其列入黑名单。
实际上,一年前Google表示,其机器学习技术现在可以阻止99.9%的Gmail垃圾邮件和网络钓鱼邮件,运行在plesk / cpanel后面的本地Microsoft Exchange和邮件服务器无法与这种保护竞争。
摘要
通过使用信誉良好的邮件服务来阻止垃圾邮件,该服务能够进行AI机器学习。您还可以采取进一步措施,阻止垃圾邮件发送者使用Cloudflare访问您的网站,Cloudflare会在绝大多数攻击性机器人到达您的站点之前对其进行检测。
我已经使用fred@no-spam.domain.com多年了。用户通常了解足以删除“无垃圾邮件”。
否则,我只使用带有“验证码”的联系表,然后直接从网站发送邮件。
如果您不介意使用JavaScript,则可以使用ROT13之类的方法来混淆电子邮件地址。例如,请参见:http :
//scott.yang.id.au/2003/06/obfuscate-email-address-with-javascript-rot13/
就个人而言,我更喜欢使用“与我们联系”表格,而不用担心水管堵塞,但当然,这完全取决于您的要求。
我使用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);
}
}
使用Zoho Creator设置联系表单。您收到的反馈将存储在您可以在线访问的数据库中,并且还将通过电子邮件发送给您。