ホームページ上でメールアドレスを公開していると、毎日何百通とスパムメール(迷惑メール)が届く。
会社のホームページを最初に公開したとき(1997年ごろかな?) まだ意識の低さもあり メールアドレスを直接絡先と称して貼り付けてしまった。 現役時代には そのせいで 毎日100通を超えるスパムメールに悩まされた。
今回作成するサイトでも 会員会社への問い合わせ用として、メール送信機能が必要だ。ところが無造作にメールアドレスを掲示すると 会員会社がスパムメールに悩む結果になってしまう。 今まではメールアドレスを画像化 したボタンを作り、そのボタンクリックでメールフォームを開く方法を取っていた。
しかし この方法には少し不満な点が残っていた。
1.サーバー側に送信用のアカウントを必要とする。
2.デザインボタン等が違和感がない場合は問題ないが
通常のアンカータグに似せたフォント・色が欲しい場合にはその実現は困難
(クロスブラウザを考えればほぼ不可能)
3.当然のことながら 専用の送信フォームが必要
WEBをググルと 『 メールアドレスをスパム(迷惑メール)送信業者から守る方法』に いろいろなスパム対策方法が載っている。今回のサイトはAjaxを使っており結果的にjavascriptが必須な ことから 対策4:JavaScriptを使ってメールアドレスをエンコード(疑似暗号化)するを採用することにした。ところが 実際にはメールアドレスはUpdatePanel内に配置されており このページの方法のままでは 一回目の表示ではうまく表示されても 一旦postbackすると 消えてしまう。そこで以下の方法をとることにした。
これで 人間には見え アドレスのコピペもできるが スパマーのアドレス収集ロボットの餌食にならないメールアド表示方法が実現できそうだ。
ASPX側に以下のJavaScriptを記述
なお メールアドレスは実際には変数になりますが テストのため 『 メールアドレスをスパム(迷惑メール)送信業者から守る方法』に載っている値をそのまま利用させていただいています。
//暗号化した変数列を復元
function convertMoji(t) {
var s = “”, moji = “”;
for (var i = 0; i < t.length; i++) {
moji = t.charCodeAt(i);
s += String.fromCharCode(moji + 1);
}
return s;
}
function fMail() {
var adr = convertMoji(String.fromCharCode(104, 109, 101, 110, 63, 97, 113, 110, 96, 99)
+ String.fromCharCode(97, 96, 109, 99, 44, 119, 111, 45, 98, 110, 108));
return (“” + adr + ““);
}
VB側 Page_Load イベント内で
ScriptManager.RegisterStartupScript(Me, System.Type.GetType(“System.String”), “init”,
“$get(‘divAdr’).innerHTML = fMail();”, True)
ここで divAdr は メールアドレスを表示する領域
※当初 postback後もメールアドレスを表示するには PageRequestManagerクラスの利用が必要かと思ったが、RegisterStartupScriptメソッドの利用で実現できた。