ホームページ作成/ホームページ作成テクニック、小技

スパム対策をしてメールアドレスを公開する方法(7ページ目)

迷惑メールを防止する7種類のスパム対策方法を解説。ホームページにメールアドレスを掲載すると、大量の迷惑メール(スパムメール)が届くようになってしまいます。メールアドレスを公開しつつも、メールアドレスの自動収集プログラムに収集されるのを防ぐ対策方法をご紹介。

西村 文宏

執筆者:西村 文宏

ホームページ作成ガイド

スパム対策6. フォームを使ってメールアドレスを掲載する方法

テキスト入力フォームを活用してメールアドレスを記載しておく方法もスパム対策になります。HTMLソース内にメールアドレスを直接記述するわけではないのに、メールアドレスをコピーしたりボタンクリックでメーラを起動したりできるため、利便性を損なわずに済みます。
 
メールアドレスをそのまま掲載するわけではないものの、JavaScriptを使ってメーラの起動を可能にしたフォームの例

メールアドレスをそのまま掲載するわけではないものの、JavaScriptを使ってメーラの起動を可能にしたフォームの例


メールアドレスのうち「@」記号の左右でテキスト入力欄を分割して表示しているため、ソースを読んでもメールアドレスだとは分かりにくくなっています。間に表示する「@」記号を画像にすればソース上では完全に分からなくなるため、さらに自動収集を防ぎやすくなるでしょう。

【このスパム対策の目次】  

フォームを使ってメールアドレスを掲載するメリット・デメリット

フォームを使ってメールアドレスを掲載するメリット
ボタンをクリックするだけでメーラを起動できますし、テキスト入力欄の中身をコピーすればメールアドレスをコピーすることもできます。自動収集プログラムがJavaScriptを実行した結果からメールアドレスを収集するタイプでも、メールアドレスが画面上に表示されるわけではないため、収集される可能性は低そうです。

フォームを使ってメールアドレスを掲載するデメリット
メールアドレスをコピーしたいだけの場合は、2回に分けてコピーする必要があるので少し手間がかかります。また、JavaScriptが使えない環境ではメーラを起動する機能が使えません。もっとも、現在ではJavaScriptが使えない環境を考慮する必要性はあまりないので、この点はデメリットとは言えないでしょう。

 

フォームを使ってメールアドレスを掲載する書き方

メールアドレスのコピーやメーラの起動を実現するHTMLソースとJavaScriptソースは以下の通りです。HTMLソース計11行の内側に、JavaScriptソースも含んでいます。

HTML・JavaScriptソース:
<form name="fm">
   <input type="text" name="e1" readonly value="example" onfocus="this.select(); document.execCommand('copy');">
   @
   <input type="text" name="e2" readonly value="example.com" onfocus="this.select(); document.execCommand('copy');">
   <script type="text/javascript">
      function ms() {
         location.href = "mailto:" + document.fm.e1.value + "@" + document.fm.e2.value;
      }
   </script>
   <input type="button" value="メーラで送信" onclick="ms();">
</form>

上記のソースは、メールアドレスとして「example@example.com」を使った例です。「@」記号の左右で分けて2つのinput要素(テキスト入力欄)に記述しています。実際に使う際には、太字で記載してあるメールアドレスの部分だけを修正して下さい。それ以外はそのままコピー&ペーストするだけで使えます。

表示・動作確認:
お使いのブラウザで動作を試してみたい場合は、サンプルページ「メールアドレスをフォームで表示する例」をご覧下さい。メールアドレスを分割して格納した2つのテキスト入力欄からコピーすることもできますし、「メーラで送信」ボタンをクリックして直接メーラを起動することもできます。

なお、先程のHTML+JavaScriptソースの内容について、以下で簡単に解説しておきます。カスタマイズしたい場合にはご参照下さい。

 

テキスト入力欄の自動選択機能の作り方

メールアドレスを「@」記号の左右で分割して記述した2つのテキスト入力フォームには、以下の工夫を施しています。
 
  1. 閲覧者が文字列をコピーしやすいよう、テキストフォーム内をクリックするだけで全体が選択されてクリップボードにコピーされるように作成しています。
  2. テキストフォームの中身を誤って書き換えてしまわないよう、編集できない状態にしてあります。

1. テキストフォーム内をクリックするだけで全体を範囲選択してコピー
テキストフォームを作るinputタグの中に書いた「onfocus="this.select();"」の記述によって、「テキストフォームがクリックされた際に中身の全体を範囲選択する」という処理が行われます。詳しくは、記事「コピーさせたい文字列をコピーしやすくする」もご参照下さい。

さらに続く「document.execCommand('copy');」の記述によって、「いま範囲選択されている内容をクリップボードにコピーする」という処理が行われます。これによって、閲覧者はわざわざコピー操作をする必要がなくなります。特にモバイル端末では操作が面倒なので、手間を省けるでしょう。

ただし「クリップボードにコピーされた」という事実は見ただけでは分からないため、「クリックするだけでコピーされますよ」という案内は併記しておく必要があるでしょう。

2. テキストフォームの中身を編集できない状態にする
input要素で作るテキスト入力欄は、readonly属性を加えると読み取り専用状態で表示されます。これによって、ユーザが誤ってキーボードに触れたとしても中身は書き換わりません。

 

コピー&ペーストを不要にする「メールを送信」ボタンの作り方

テキスト入力フォームの横にある「メールを送信」ボタンをクリックすると、メールアドレスがメーラに渡されます。たいていの環境では、このメールアドレスを宛先にした新規メール作成画面が開くでしょう。このボタンを用意しておけば、わざわざメールアドレスをコピー&ペーストすることなくメールを送信可能なので便利です。

この機能は、JavaScriptで下記の2つの処理を実行することで実現しています。

処理1. メールアドレスを生成する
テキスト入力フォーム2つに書かれた文字列を「@」記号で結合することでメールアドレスを生成しています。先のHTMLソースでは、form要素には「name="fm"」という記述で「fm」という名称を付加しています。2つあるinput要素には「name="e1"」と「name="e2"」という記述でそれぞれ「e1」と「e2」という名称を付加しています。

この場合、JavaScriptで「document.fm.e1.value」と書けば、フォーム「fm」に含まれる入力欄「e1」の中身が得られます。したがって、下記のように書くことで2つのテキストフォームの中身を「@」記号で結合してメールアドレスの形にできます。
document.fm.e1.value + "@" + document.fm.e2.value

処理2. メーラにメールアドレスを渡す
ブラウザのアドレス欄に直接「mailto:example@example.com」などと入力すれば、たいていの環境ではメーラが起動します。これと同じことをJavaScriptで実行しているだけです。

先程の処理1で作成したメールアドレスの先頭に「mailto:」という7文字を加えてから、それをURLとしてブラウザに渡します。指定のURLへ移動させるには、location.hrefプロパティにURLを代入すれば良いだけですから、それと同じ方法を使って「mailto:」で始まるメールアドレスを渡せば、メールアドレスへのリンクをクリックした際と同じ状況を作れます。
location.href = "mailto:" + document.fm.e1.value + "@" + document.fm.e2.value;

上記の処理を「メールを送信」ボタンがクリックされた際に実行するよう書けば、メーラを起動する機能になります。

 

JavaScriptソースに「mailto:」の文字も含めないようにする方法

この方法ではJavaScriptソース内に「mailto:」の文字列が含まれるので、その直後にメールアドレスを生成していることは容易に判明します。その点が気になるなら、前ページの「スパム対策5. JavaScriptでメールリンクを生成する方法」でご紹介したASCIIコードを使う方法を併用すると良いでしょう。

具体的には「"mailto:"」の部分を「String.fromCharCode(109,97,105,108,116,111,58)」に置き換えて、以下のように記述します。
location.href = String.fromCharCode(109,97,105,108,116,111,58) + document.fm.e1.value + "@" + document.fm.e2.value;
これなら、JavaScriptソースの中に「mailto:」の文字列も出てこなくなります。


最後に、メール送信フリーCGI・PHPを使う方法をご紹介いたします。
  • 前のページへ
  • 1
  • 6
  • 7
  • 8
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます