守望的麦子

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

2018-5-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 源代码迷惑方法,比如:

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

2) 使用 CSS :after

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

3) HTML 和 CSS:

1 <style type="text/css">
2 p span.displaynone { display:none; }
3 </style>
4 
5 <p>yourname@<span class="displaynone">null</span>gmail.com</p>

4) HTML + CSS + JavaScript:

1 .cryptedmail:after {
2   content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
3 }
1 <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

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

使用时这样引用:

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

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

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

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

 1 <script type="text/javascript">
 2 var reversedEmail = document.getElementById("email").innerText;
 3 document.getElementById("email").addEventListener('copy', function(e) {
 4     var selection = window.getSelection().toString();
 5     if (selection.indexOf(reversedEmail) >= 0) {
 6         var normalEmail = selection.split("").reverse().join("");
 7         e.clipboardData.setData("text/plain", normalEmail);
 8     }
 9     e.preventDefault();
10 });
11 </script>

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

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

解码:

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

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

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

参考文章:

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

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

最近更新: