守望的麦子

保护邮箱地址(反垃圾邮件)

2018-05-24    大连    /internet/anti-spam.html internet anti-spam, encryption, javascript

不请自来的电子邮件(通常被称为垃圾邮件)是电子通信领域面临的最大问题之一。据统计:垃圾邮件占全部电子邮件通信的比率高达 80%。

现在的邮箱(如 Gmail)自身通常提供反垃圾邮件的增强过滤——根据预定义的受信任地址(白名单)和垃圾邮件地址(黑名单)识别不请自来的电子邮件的功能。除此之外,我们还应该注意在日常上网过程中保护我们的邮箱地址。

注册服务时……

例如 Gmail 用户在信任度低的站点注册时,使用 + 号:如果 Gmail 邮箱地址是 yourname@gmail.com,可以填写 yourname+shopping@gmail.com,这样既无需开设新的电子邮箱,又能保证可以正常接收邮件。

考虑一下网上购物时的情况:你买东西的每一个网站都想留下你的电子邮件地址,以便给你发送货款收据、送货通知之类信息。通常可以肯定,它们也会利用你提供的邮件地址向你发送打折券、促销信息之类内容。由于来自这些网站的邮件又可能包含有关你购买产品的重要信息(例如通知、订单等),因此把这些网站加入垃圾邮件的黑名单并不是一个好主意。

在这种情况下,你可以针对每一个购物网站创建一个电子邮箱。但是这个办法效率不高,容易造成混乱。而在 Gmail 邮箱地址中使用 + 就可以帮助我们解决这样的问题。

接下来你可以设置过滤条件,把所有发向 yourname+shopping@gmail.com 的邮件自动存档。通过这种操作,所有来自购物网站的邮件会自动从当前收件箱中转移出去,成为 Gmail 邮箱里的历史邮件。这样,那些邮件就不会分散你的注意力,当你搜索邮件或者查看收件箱的时候,这些邮件也都还在。另一个办法是,你可以给所有发向 yourname+shopping@gmail.com 的邮件自动加上诸如“购物”之类的标签,然后可以根据需要,对相关的邮件进行查看或归类。

这个方法的不足是——很多网站不接受含有 + 的邮箱。

写博客时……

另外,我们还应该在公共站点或者个人博客上保护邮箱地址。最简单的方法是用一些其他字符代替 @,如 yourname@gmail.com 会被垃圾邮件机器人一下子识别出这是邮箱,而用 yourname在gmail.com 可能就安全一些(注意:避免一些已经被用烂了的字符替换——用 # 替换 @ 在过去垃圾邮件过滤不成熟的时候有些用,现在用处已经不是很大了),或者直接用一张图片。

如果自己可以直接控制博客代码,可以参考下面的一些方法。

1) HTML 源代码迷惑方法,比如:

yourname<!-- >@. -->@<!-- >@. -->gmail<!-- >@. -->.<!-- >@. -->com

2) 使用 CSS :after

<style type="text/css">
p.email:after { content: "yourname\40gmail.com"; }
</style>
<p class="email">email me: </p> 

3) HTML 和 CSS:

<style type="text/css">
p span.displaynone { display:none; }
</style>

<p>yourname@<span class="displaynone">null</span>gmail.com</p>

4) HTML + CSS + JavaScript:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
<a data-name="info" data-domain="test" data-tld="com" href="#" class="cryptedmail" onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld"></a>

如果网站禁用了 JavaScript,click 事件会无法工作,但是邮箱地址仍可正常显示。

5) 使用 JavaScript,定义 function

<script type="text/javascript">
    function gen_mail_to_link(lhs,rhs,subject) {
        document.write("<a href=\"mailto");
        document.write(":" + lhs + "@");
        document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
    }
</script>

使用时这样引用:

<script type="text/javascript"> 
    gen_mail_to_link('yourname','gmail.com','Hey! there.');
</script>
<noscript>
  <em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>

6) 使用 CSS 反序(参考链接)。例如:

<span id="email" style="unicode-bidi:bidi-override; direction: rtl;">
    moc.liamg@emanruoy
</span>

这样看上去就是正常的 yourname@gmail.com,但如果复制粘贴出来就会发现是反的。可以通过 JavaScript 解决:

<script type="text/javascript">
var reversedEmail = document.getElementById("email").innerText;
document.getElementById("email").addEventListener('copy', function(e) {
    var selection = window.getSelection().toString();
    if (selection.indexOf(reversedEmail) >= 0) {
        var normalEmail = selection.split("").reverse().join("");
        e.clipboardData.setData("text/plain", normalEmail);
    }
    e.preventDefault();
});
</script>

7) 极客一点的方法——使用 base64 编码/解码,编码方法如下:

$ echo -n 'yourname@gmail.com' | base64
eW91cm5hbWVAZ21haWwuY29t

解码:

$ echo -n eW91cm5hbWVAZ21haWwuY29t | base64 -d
yourname@gmail.com

注意:在 macOS 上面,需要使用 -D

$ echo -n eW91cm5hbWVAZ21haWwuY29t | base64 -D
yourname@gmail.com

参考文章:

Silvan Mühlemann 研究对比了 9 种隐藏邮件地址的方法,以及一些 CSS 的 tricks。

关于作者
麦子,80 后,现从事通信行业。安卓玩家一个人的书房朗读者。
MRJENGLISH
jsntn
jasonwtien
jasonwtien
更多…… /about.html

最近更新: