web-dev-qa-db-ja.com

mailtoリンクをスパム対策するには?

訪問者が自分のWebページで直接メールアドレスをクリック(またはコピー)できるようにしたい。ただし、ボットやその他のクローラーが上記のメールアドレスを取得してスパムリストに登録するのを(少し)難しくすることができれば、それは素晴らしいことです。

JavaScriptまたはピュアHTMLでこれを行うさまざまな方法(つまり、mailto HTMLリンクのエンコード)を見つけましたが、皆さんは何をお勧めしますか? JavaScriptの手法はより複雑に見えますが、これは、JavaScriptをオフにしているユーザーやGoogleのような正当なクローラーに影響を与える可能性があります。

一方、HTMLの1つは少し基本的なように見えますが、ボット作成者は今ではそれを理解しているはずです...

私はこれをやる必要がありますか、それともスパマーは私のメールを受け取りますか?スパム対策フィルターがどんどん良くなっていることは知っていますが、スパマーの速度を落とすためにもっとできることがあれば、そうします。

44
Wookai

JavaScriptは、依然として最高のmailto難読化ツールの1つです。 JavaScriptが無効になっているユーザーの場合、mailtoリンクを連絡先フォームへのリンクに置き換えることができます。

以下は、人気のあるJavaScriptスパム対策電子メール難読化ツールです。

サーバー側から難読化された電子メールを生成できるようにするために、上記の PHPバージョン もあります。

これは、上記のツールが私のメールアドレスを難読化するために生成するJavaScriptコードです(コメントはそのまま):

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "[email protected]"
  key = "1DtzZ8TGBuhRjJMKWI4gkUF2qidfOyPmSN7X30Vpso6xvErLnwQCbalA95HcYe"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else {     
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
  document.write("<a href='mailto:"+link+"'>Email Me</a>")
}
//-->
</script><noscript><a href='contact-form.html'>Email Me</a></noscript>
37
Daniel Vassallo

これは、文字をエンコードする非常にクールな方法のように見えますが、基本的なスパムボットを無効にすると思われます。

http://robspangler.com/blog/encrypt-mailto-links-to-stop-email-spam/

そう

<a href="mailto:[email protected]">Email</a>

になる

<a href="&#x6d;&#97;&#105;&#108;&#x74;&#111;&#58;&#116;&#101;&#115;&#116;&#x40;&#x74;&#101;&#115;&#x74;&#x2e;&#x63;&#111;&#109;">Email</a>

Javascriptを必要としないという点で魅力的です。

ここにPlunkerの例

13
Harry

あなたはできましたreCAPTCHA Mailhide機能を使用しました。これにより、フォーム上のメールアドレスがレンダリングされます[email protected]ここで、省略記号は住所全体を表示するためのリンクです。それは訪問者にとって少し面倒ですが、プレミアムな保護を提供する必要があります。そうは言っても、この手法ではnotでは、訪問者がWebページから直接アドレスをコピーできません。

私は、Googleのような「合法的なクローラー」に関する部分を取得しません。少なくとも、とにかくGoogleがメールアドレスのインデックスを作成する必要がある理由はわかりません。 (以下のOPコメントを参照してください。)

10
jensgram

Daniel Vassalloの回答に基づいて、JSを評価する巧妙なスパムボットを回避するmaymailtoリンクを暗号化する1つの方法document.writes(incarnateが指摘したように)は、リンクがクリックされたときにのみ評価されるJavascript関数に復号化を配置します。たとえば、base64を「暗号化」として使用します。

<script>

  function decryptEmail(encoded) {

    var address = atob(encoded);
    window.location.href = "mailto:" + address;

  }

</script>

<a href="javascript:decryptEmail('dGVzdEB0ZXN0LmNvbQ==');">Email</a>

Working Plunker

私は、これがより洗練されたクローラーによって裏切られることができるかどうかを知ると主張しません。

5
Harry

aemail.com のような外部サービスを使用できます。

@emailは、リンクをクリックした後、送信者をmailto-urlにリダイレクトする短いURLを使用して電子メールを隠す無料の電子メール非表示サービスです。

Aemail.comでメールを入力すると、「mailto」リンクを置き換えるために使用できる短いURLが表示されます。リンクがクリックされると、ユーザーはaemail.comの通知なしに「mailto」URLにリダイレクトされます。 [〜#〜] api [〜#〜] を使用して、電子メールを非表示にしたり、URLを動的に取得したりできます。

例:

<a href="mailto:[email protected]">Contact</a>

交換された

<a href="https://aemail.com/q2">Contact</a>

メールリンクを機能させます。

3
James

私は単に使用します:

<script language="javascript" type="text/javascript">
var pre = "hideme";
document.write("<a href='mailto:" + pre + "@domain.com'>" + pre
+ "@domain.com</a>");
</script>
<noscript>Enable javascript to see our email!</noscript>
2
HasanG