このmdbはWebページを出している/管理している人だけの役に立つものです。
最近私のところには外国からのスパムメールが多い日には1日30通以上も届くようになり困っています。
その状態と対策は[Webページの小技日記]の 憎っくきSPAMめ! に書いて
おりますのでご覧下さい。
Webページにメールアドレスを文字で掲載したり、リンクを作成するとspamメール業者にアドレスを収集されリストに載せられてしまうと言われていますが、リンクをクリックすれば宛先の入った新規メールが起動できるmailto:タグは便利であり、商売関連のページでは記入しない訳にはいきません。
spamメール業者はhtmlソースを自動走査し「mailto」や「@」などの文字を頼りに自動でメールアドレスを取得していると思われるので、それを阻止するためにはそれら文字列を使わずに
mailto: タグとメールアドレスを書いておけば良い訳です。
実にうまいことにhtmlではJavaScriptが使用でき、JISコードで書いた文字も理解してくれますから、このmdbでは3通りの方法で作成し、実際にこのmdbのある場所にtest.htmとして書き出してブラウザーで確かめることができ
るようになっています。
mailtoタグは普通
ponpoko@herohero.com のように作り、あて先の入った新規メールを起動しますがタグ部分は
<a href="mailto:ponpoko@herohero.com">ponpoko@herohero.com</a>
というようになっており黒字の部分が実際に表示されるところですから
<a href="mailto:ponpoko@herohero.com">ポンホコにメールする</a>
と書けば
ポンホコにメールする というリンクが出来上がる訳です。
この表示される部分を画像にすれば
<A href="mailto:ponpoko@herohero.com"><IMG
src="img/post.gif" border="0"></A>

という具合でこれもクリックすれば新規メールが開きます。
これら普通のやり方では「mailto」や[メールアドレス]がもろに文字列として記載されてしまうのでspamやさんの餌食になりますよ!という事です。
ダウンロード


mdb版イメージ

一般用EXEイメージ

VBのソースファイル一式もダウンロードできますのでご利用ください!
【 使い方 】
作成されたJavaScript あるいはJISコードのタグをコピーして自分のWebページに貼り付け、またはhtm出力されたものから必要部分のみコピー/ペーストしてください。
下の変換例で実際にhtmlに記載するのは黄色背景の枠内部分のみです。
テーブルにあるコード表を表示します。
番号: vbでも使う10進コード番号、と16進変換したJISコード番号を併記。
初回だけボタンクリックでテーブルに書き出します。
このmdb中のテーブルは何にも使っておらず、参考として見るためだけのもの。
ASCII文字16進コード表(青は制御文字)
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
| 0 |
Null |
DEL |
Space |
0 |
@ |
P |
` |
p |
|
|
|
ー |
タ |
ミ |
|
|
| 1 |
Start of Heading |
Device Control 1 |
! |
1 |
A |
Q |
a |
q |
|
|
。 |
ア |
チ |
ム |
|
|
| 2 |
Start of Text |
Device Control 2 |
" |
2 |
B |
R |
b |
r |
|
|
「 |
イ |
ツ |
メ |
|
|
| 3 |
End of Text |
Device Control 3 |
# |
3 |
C |
S |
c |
s |
|
|
」 |
ウ |
テ |
モ |
|
|
| 4 |
End of Transmission |
Device Control 4 |
$ |
4 |
D |
T |
d |
t |
|
|
、 |
エ |
ト |
ヤ |
|
|
| 5 |
Enquiry |
Negative Acknowledge |
% |
5 |
E |
U |
e |
u |
|
|
・ |
オ |
ナ |
ユ |
|
|
| 6 |
Acknowledge |
Sycronous Idle |
& |
6 |
F |
V |
f |
v |
|
|
ヲ |
カ |
ニ |
ヨ |
|
|
| 7 |
Bell |
End of Transmission Block |
' |
7 |
G |
W |
g |
w |
|
|
ァ |
キ |
ヌ |
ラ |
|
|
| 8 |
Back Space |
Cancel |
( |
8 |
H |
X |
h |
x |
|
|
ィ |
ク |
ネ |
リ |
|
|
| 9 |
Horizontal Tabulation |
End of Medium |
) |
9 |
I |
Y |
i |
y |
|
|
ゥ |
ケ |
ノ |
ル |
|
|
| A |
Line Feed |
Substitute character |
* |
: |
J |
Z |
j |
z |
|
|
ェ |
コ |
ハ |
レ |
|
|
| B |
Vertical Tabulation |
Escape |
+ |
; |
K |
[ |
k |
{ |
|
|
ォ |
サ |
ヒ |
ロ |
|
|
| C |
Form Feed |
File Separator |
, |
< |
L |
\ |
l |
| |
|
|
ャ |
シ |
フ |
ワ |
|
|
| D |
Carriage Return |
Group Separator |
- |
= |
M |
] |
m |
} |
|
|
ュ |
ス |
ヘ |
ン |
|
|
| E |
Shift Out |
Record Separator |
. |
> |
N |
^ |
n |
~ |
|
|
ョ |
セ |
ホ |
゛ |
|
|
| F |
Shift In |
Unit Separator |
/ |
? |
O |
_ |
o |
|
|
|
ッ |
ソ |
マ |
゜ |
|
|
このコード表は16進数で番号が振ってありますがVBで普通に使う場合は10進数の番号を使います。
Accessでも頻繁に利用する改行コード vbCrLf は10進数番号13番(Carriage Return) + 10番(Line
Feed)ですから、
Chr(10) & Chr(13)と書くこともできます。
例--- "@"
この表では16進数コード番号 40
"@"の10進数コード番号は・・・ Asc("@") → 64
"@"の16進数コード番号は・・・ Hex(Asc("@")) → 40
10進数コード番号64の文字は・・・ Chr(64) → "@"
16進数コード番号40の文字は・・・ Chr(&H40) → "@"
単にメールアドレス(または任意のASCII文字列)をJISエンコードします。
【設置例1】→
JavaScriptを使ったタグ全体をJISエンコードしてしまいます。
途中で改行できないので横に長い文字列となってしまうが、mailto:タグ部分をそっくり入れ替えるだけですむ。
| <a href="mailto:ponpoko@herohero.com">ponpoko@herohero.com</a> |
| <SCRIPT language="javascript">eval(unescape('document.write('<a
href="mailto:ponpoko@herohero.com">ponpoko@herohero.com</a>');'))</SCRIPT> |
| <SCRIPT language="javascript">eval(unescape('%64%6F%63%75%6D%65%6E%74
%2E%77%72%69%74%65%28%27%3C%61%20%68%72%65%66%3D%22%6D%61%69%6C%74%6F%3A
%70%6F%6E%70%6F%6B%6F%40%68%65%72%6F%68%65%72%6F%2E%63%6F%6D%22%3E%70%6F
%6E%70%6F%6B%6F%40%68%65%72%6F%68%65%72%6F%2E%63%6F%6D%3C%2F%61%3E%27%29
%3B'))</SCRIPT> |
[上]をJavaScriptで書き直し[中] さらに全体をJISエンコードしunescapeで復号させる。
【設置例2】→
ponpoko@herohero.com
mailto:という文字そのものは残るがメールアドレス部分はJISエンコードされているので簡単に収集されにくい。
文字としてページに表示される部分はhexエンコードを使用。
この方法を使ったページをHomepageBuilderで開くとエラーと判断され勝手に書き換えられて機能しなくなる。
FrontPageでは問題ない。
| <a href="mailto:ponpoko@herohero.com">ponpoko@herohero.com</a> |
<a href="mailto:%70%6F%6E%70%6F%6B%6F%40%68%65%72%6F%68%65%72%6F%2E%63%6F%6D">
ponpoko@heroh
ero.com
</a> |
【設置例3】→

これが一番理解しやすい方法と思われる。
文字としてページに表示される部分は画像で作って用意しておき、メールアドレス部分のみJISエンコードし画面表示部分は画像を使います。
メールアドレスを画像で作ったファイルの相対パスは記入必須。
正しいパスは後で書き直せば良い。
当然ですがhtmlで使うので gif/png/jpg のみです。
メールアドレスを描いた画像だけでなく普通の画像でもかまいません。
htmlソースでメールアドレス部分のみをJISエンコードされたものと入れ替えるだけでOK。
これはリンクに使う画像です→  |
| <a href="mailto:ponpoko@herohero.com"><img src = "img/tanuki_mail.gif"
border="0"></A> |
| <a href="mailto:%4D%61%69%6C%74%6F%3A%70%6F%6E%70%6F%6B%6F%40%68%65%72%6F
%68%65%72%6F%2E%63%6F%6D"><img src = "img/tanuki_mail.gif" border="0"></A> |
【設置例4】→
絵でリンクのサンプル
変換3ではメールアドレスの文字を画像で作りリンクをつけましたが、このサンプルではポストの絵にリンクをつけます。
mailtoタグのメールアドレス部分は同じくJISエンコードされています。
HomepageBuilderなどを使う場合は普通のやり方で絵を選択しておいてリンク設定ボタンを押し、メールアドレス記入欄に「文字変換」ボタンで変換したJISエンコードされた文字列を貼り付けるだけでできてしまいます。
| <a href="mailto:ponpoko@herohero.com"><img src="img/post.gif"
border="0"></A> |
| <a href="mailto:%4D%61%69%6C%74%6F%3A%70%6F%6E%70%6F%6B%6F%40%68%65%72%6F
%68%65%72%6F%2E%63%6F%6D"><img src = "img/post.gif" border="0"></A> |
JavaScriptとJISエンコードで作成されたものを実際のページとしてこのmdbと同じフォルダーにtest.htmとして書き出し、ブラウザーを自動起動して確かめることができます。
ページのリンクをクリックして新規メールが立ち上がれば成功です。
(「標準のメーラーとして使用する」設定がされていないとメーラーは起動しません)
【 逆変換 】
逆変換、つまりJISエンコードされた文字を人間が読めるASCII文字に変換する機能、これはいわばspam屋さんがやるべきこと
であり本末転倒と思われるのでこのソフトの機能としては付けませんが、スクリプトのみ出しておきます。
Private Sub gyaku_henkan_Click()
Dim temp, H, i
H = Split(Me.JisMoji, "%")
For i = 0 To UBound(H)
On Error Resume Next
temp = temp & Chr("&h" & H(i))
If Err = 0 Then
If Len(H(i)) > 2 Then temp = temp & Mid(H(i), 3)
Else
Err = 0
If i > 0 Then
temp = temp & Chr("&h" & Left(H(i), 2))
If Err > 0 Then
temp = temp & "%" & Left(H(i), 2)
Err = 0
End If
temp = temp & Mid(H(i), 3)
Else
temp = temp & H(i)
End If
End If
Next i
MsgBox temp
End Sub
|
Split()を使っているのでAccess2000以上用
Me.JisMoji とはJISエンコードされた文字列(これから逆変換する文字列)
%に続く2文字の16進数を逆変換する訳ですが、ASCII文字が混じっている場合はそのまま出力します。
要するに原理は
temp = temp & Chr("&h" & H(i))
だけなんですが
Chr(&H40) → "@"
Chr(&H40 ) → "@"
というぐあいに後ろにスペースが入ってもスペースを無視して変換してしまいますから特別の処理が必要になります。
もちろんスペース以外の文字が来ればエラーになりますからそれなりの処理が必要になってきます。
そういうことを考慮した結果こんなに長いものになってしまいました。
Hexエンコード部分はノータッチです。