隐藏 Mailto 链接。

3

我的网站上有各种不同的mailto:电子邮件地址,现在它们正在遭受各种收割机的攻击,随后我会收到垃圾邮件。

有人能帮我创建以下PHP代码吗:

<a href="mailto:info@company.com">info@company.com</a>

为了防止地址被收集,我可以在网站上显示的各种电子邮件地址上使用此脚本吗?
谢谢。
9个回答

3

有人建议使用JavaScript的document.write()编写电子邮件地址。我不喜欢这种方法,因为它很容易被机器人攻破,而且无法真正地渲染页面。我曾经收到过用这种方式“保护”的电子邮件地址的垃圾邮件(虽然数量和速度都没有未受保护的地址那么多,但仍然存在)。

我更喜欢的方法是使用一个虚拟的电子邮件地址来编写链接(可以将其发送到您邮件服务器上的蜜罐电子邮件地址,以便您可以确定要列入黑名单的服务器IP地址)。然后,在链接上使用一个onClick处理程序,在用户单击时替换为真实的电子邮件地址。没有电子邮件收割机会向页面上的每个链接发送点击事件,这种方法行不通。

<a href="mailto:fake@example.com" 
   onClick="this.href=this.href.replace('fake', 'real')">
Send Us E-mail</a>

在这个例子中,我们从“fake@example.com”开始,当用户点击链接时用“real”替换“fake”。
我喜欢的另一个想法是让用户在表单中输入他们的电子邮件地址。然后你可以使用脚本向他们发送一封电子邮件。他们回复该电子邮件地址以与您联系。换句话说,除非他们给出自己的有效电子邮件地址,否则他们不会得到您的电子邮件地址,您的地址也永远不会出现在网站上。

如果JavaScript被禁用了会怎样? - seriousdev
然后邮件肯定会发错地方,你可能会错过来自Lynx用户的多达三封电子邮件。如果你真的很担心这个问题,那么假链接可以指向你的电子邮件地址的图片或其他内容。或者你可以让假电子邮件地址发送给他们一个自动回复,要求他们回复才能收到消息。发挥你的想象力... - kindall

2
我找到的最佳解决方案是使用一些Javascript。你调用一个函数,传入地址,它就会为你打印链接。由于大多数机器人不处理Javascript,这应该适用于大多数情况:
<script type='text/javascript'>
    function email(name, domain, withlink) {
        var addr = name + '@' + domain;
        if(withlink) {
            document.write('<a href="mailto:' + addr + '">' + addr + '</a>');
        } else {
            document.write(addr);
        }
    }
</script>

然后,当您想在网站上打印电子邮件地址时:

<script>email('myuser', 'mydomain');</script>

如果你想将其变成可点击的链接:
<script>email('myuser', 'mydomain', true);</script>

注意:这还未经过测试,但应该可以工作。还有更高级的技术,其他答案中也提到了一些,但大多数都是基于这样的基础构建的。

你好,我该在 JavaScript 中编辑什么来添加实际地址呢?谢谢。 - Bill Johnson
我不确定你在问什么。后两个例子是如何将电子邮件地址添加到页面中,您可以使用任何电子邮件地址:<script>email('bob', 'domain.com', true);</script>会在您放置该代码的确切位置生成一个指向bob@domain.com的电子邮件链接。 - Alex Vidal
非常感谢您的帮助,真是太棒了。 - Bill Johnson
@AlexVidal 如果我想要在锚点中添加主题,该怎么做? - V15HM4Y

1

我会用JavaScript来做。尝试像这样:

<script>
document.write('<a href="mailto:inblahfo@company.com">inblahfo@company.com</a>'
.replace(/blah/g, ''));
</script>

这是一种方法,+1 可以抵消 ;) - Sarfraz
我不想重复自己,但是...为什么会有第二个踩? - thejh
@thejh 我认为聪明的人认为即使由JS生成,电子邮件仍然可以被收集。 从技术上讲是正确的,在实践中我认为这是可行的,所以我帮你取消了点赞 :) - MK.
起初我没有看到inblahfo中的blah,几乎因为正则表达式的易感性而投了反对票,所以+1让我清醒了。 - Josh

1
我会这样做:
function obfuscate_email($email) {
    $obf = '';
    for($i = 0; $i < strlen($email); $i++) {
        $obf .= '&#' . ord($email[$i]) . ';';
    }
    return $obf;
}

echo '<a href="mailto:' . obfuscate_email('info@company.com') . '">' . obfuscate_email('info@company.com') . '</a>';

HTML源代码:

<a href="mailto:&#105;&#110;&#102;&#111;&#64;&#99;&#111;&#109;&#112;&#97;&#110;&#121;&#46;&#99;&#111;&#109;">&#105;&#110;&#102;&#111;&#64;&#99;&#111;&#109;&#112;&#97;&#110;&#121;&#46;&#99;&#111;&#109;</a>

用户看到的内容:

info@company.com


1
唯一的问题是电子邮件地址仍然在javascript代码的明文中。一个简单的正则表达式仍然可以找到它。任务失败。 - Nathan Strong
1
实际上我看不到JavaScript。 - seriousdev

1

看起来不错。生成的JavaScript代码对我来说完全无法理解。 - Josh
有点过头了,不是吗? - riegersn

0
最简单的解决方案是为您的公司电子邮件地址创建一个图像:)
或者
您可以使用这个在线工具:
<script type="text/javascript">
  var part1 = "me";
  var part2 = "mydomain.com";
  var part3 = "Click Here to Send";
  document.write('<a href="mai' + 'lto:' + part1 + '@' + part2 + '">');
  document.write(part3 + '</a>');
</script>

或者

查看更多方法:


@Downvoter:为什么要点踩?您看了我发布的所有可能性吗? - Sarfraz
第二个足够有效。你甚至可以使用 document.write(part1 + '@' + part2 + '</a>'); 这样 Bill 就不必改变他的原始概念了。很好。 - Ben

0

您可以使用免费的外部服务,例如aemail.com

@email是一个免费的电子邮件隐藏服务,它使用短链接隐藏电子邮件,当点击链接后将发送者重定向到mailto-url。

在aemail.com输入电子邮件后,您将获得一个短链接,该链接可用于替换您的'mailto'链接。一旦链接被点击,您的用户将被重定向到'mailto' URL,而不会注意到aemail.com。 API 可用于动态隐藏电子邮件/获取URL。

示例:

<a href="mailto:info@itee.com">联系我们</a>

替换为

<a href="https://aemail.com/q2">联系我们</a>

将保持电子邮件链接正常工作。


鉴于那个特定网站缺乏信息,人们可能会对使用他们的服务和提供想要保护的电子邮件地址感到谨慎。 - P-Gn
问题是如何停止垃圾邮件,而这是我能想到的最简单的方法之一。我并不坚持使用特定的服务或其市场营销成功,提及它的唯一原因是因为我正在使用它而没有遇到任何问题或垃圾邮件。谢谢! - James

0

0

我推荐使用reCAPTCHA。它会在显示你的电子邮件之前让你输入两张图片中的文字,这样可以完全保证安全性,并且还有助于数字化图书。该网站提供了一个很棒的API(复制粘贴代码),可以轻松地将其实现到你的网站上。

更新 - 这里是Mailhide的直接链接


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