28.空メールでアドレス収集してみよう
空メールとは、題名(件名)も本文も書かれていないメールのこと。
製品やイベント情報の案内メールを送ってきた相手に送信するために、よく用いられるメールアドレスの自動収集方法である。
本書では、E-Post Mail Server シリーズに準備されている「追加処理プログラム」の機能を使って、空メールからメールアドレス取得のためのプログラムをカスタマイズして、メールアドレスを取得できるか行ってみる。
追加処理プログラムの機能により空メールでアドレス収集
「追加処理プログラム」機能は、内部のユーザ宛やメーリングリスト宛に届いたメールに対して、各自でカスタマイズしたプログラムを実行できる機能だ。ただし、指定できるプログラムは、標準コンソールベースで動作するプログラムに限られる。GUIベースのツールは実行できないので注意が必要だ。
イー・ポストのWebサイトにある「ダウンロード」コーナーから、追加処理のための組み込みサンプルプログラムが取得できる。
サンプルはC言語だが、VBスクリプトなどのインタプリタでも実行可能なように、pwrapper.dll というDLLが用意されている。ここでは、このプログラムから、VBスクリプトで届いたメールの送信元アドレスを取得し、任意のファイル(今回は mailaddr.txt )に保管してみることにする。
1. pwrapper.dll をダウンロード
下記リンクより pwrapper.dll をダウンロードし、プログラムインストールフォルダ(デフォルトでは、C:\Program Files\EPOST\MS\)に解凍して保存しておく。
これで、"cscript.exe"(コマンドプロンプトから実行可能な VB Script 実行用インタプリタ=\Windows\System32\フォルダ内にある)を使って、VB Script で作成したスクリプトを実行することが可能になる。
■ pwrapper.dll ダウンロード
このDLLは32bit版です。64bit版のDLLをお試しになりたい方は別途お問い合わせください。
2. スクリプトプログラムの作成
抽出するためのスクリプトプログラムを VB Script で作成、サンプルソース名を [GetRecipentAddr.vbs] として、以下の内容を記述し、プログラムインストールフォルダ(C:\Program Files\EPOST\MS\)に保管する。
ファイルが正しくできているか、念のため確認しよう。
-
[GetRecipentAddr.vbs]
Set A=WScript.Arguments
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
' Argumentから対象のRCPファイル(.$CP)をファイルの位置を割り出す。
mMSG = A(1) ' 例:"C:\mail\incoming\B0000123123.MSG"
n = InStrRev(mMSG, ".", -1)
mRCP = Mid(mMSG , 1, n ) + "$cp"
' トリガとなったMSG,RCP($CP)ファイルのフォルダ位置をファイルに保存。
' 空メールアドレスのみ記録したいなら以下の4行は不要。
set fout= fs.CreateTextFile("C:\mail\inbox\test-sample.jp\user1\mailaddr.txt")
fout.Write mMSG & vbCr
fout.Write mRCP & vbCr
fout.Close
' RCP($CP)ファイルから送信元のエンベロープを取り出す。
Set fin = fs.OpenTextFile(mRCP, 1)
mMID = fin.ReadLine
mRP = fin.ReadLine
fin.Close
email = InStr(mRP, " ")
' 送信元のエンベロープをファイルに保存(空メールアドレス取得)
set fout= fs.CreateTextFile("C:\mail\inbox\test-sample.jp\user1\mailaddr.txt")
fout.Write Mid(mRP, email+1) & vbCr
fout.Close
-
空メールでのアドレス取得方法
E-Post Mail Server シリーズでは、メール本文が拡張子".MSG"ファイルの中に含まれている。
また、送信元エンベロープ(エンベロープFROM)は、拡張子".RCP"ファイルの中に含まれているので、この内容を抽出するようにすればよいことになる。拡張子".RCP"ファイルの構造は、以下の通り。
Message-ID: <B0000098513@xxxx.xxx.xxx.jp> ← メッセージID
Return-path: xxxx@xxxx.jp ← 送信元
Recipient: xxx@xxx.jp ← 送信先1
: :
Recipient: xxx@xxx.jp ← 送信先N
3.空メールの受信用アドレスを設定する
ここでは、空メールの受信用アドレスを user1@test-sample.jp に設定してみる。
アカウントマネージャ(E-POST Account Manager)を起動し、user1 を選択し、右クリックメニューから「メール制御」を選択。
表示される「メール制御」ダイアログボックスで自動応答または自動転送の設定を行い、合わせて追加処理プログラムを指定する。
-
「メール制御」の追加処理プログラム欄の設定例
"C:\Program Files\EPOST\MS\pwrapper.dll" c:\windows\system32\cscript.exe?"C:\Program Files\EPOST\MS\GetRecipentAddr.vbs"
※ cscript.exeは、フォルダ位置を使用環境に合わせて正しくフルパスで指定すること。
なお、自動応答または自動転送の設定をしたくないときは、メールボックスフォルダ内に保存される IMS.CTL ファイル内に、下記以外の記述を削除して保存しておけば、自動転送または自動応答を行なわない状態のまま、追加処理プログラムを動作させることができる。
-
IMS.CTL ファイルの変更例
[AutoProcess]
Module=<コンソール専用追加処理プログラム>
設定が完了したら、任意のメールアドレス(たとえば 1111@1234.jp のようなダミーアドレスでもよい)を送信元として、telnetコマンドで user1 宛にメール送信してみよう。なお、下の例ではSMTP認証を利用しているが、実際にはツールの助けを得なければエンコードされたパスワードを作り出すのは難しいので、SMTP認証なしの設定で試すとよいだろう。
telnet 192.168.0.103 smtp<CR> ←自分で入力する内容 220 test-sample.jp E-POST ESMTP Receiver (4.xx)...... →SMTPサービスが応答を返す EHLO<CR> ←拡張SMTPであることを宣言 250-test-sample.jp Hello [xxxx.xxx.xxxx.xxxx], pleased to meet you 250 AUTH PLAIN LOGIN CRAM-MD5 →SMTP認証可能であることを回答 AUTH PLAIN AFVzZXIxQHRlc3Qtc2FtcGxlLmpwAHVzZXIxMjM0 ←PLAINでアカウントとパスワード送信 235 Authentication successful. →SMTP認証OK mail from: <1111@1234.jp><CR> ← 1111@1234.jp から 250 <1111@1234.jp>... Sender ok. →送信者OK rcpt to: <user1@test-sample.jp><CR> ← user1@test-sample.jp あてへ 250 <user1@test-sample.jp>... Recipient ok. →送信先OK data<CR> ←ヘッダと本文の書き始め 354 Start mail input;id <BXXXXXXXXXX> end with <CRLF>.<CRLF> .<CR> ←データ終わりのピリオド(空メール) 250 Message received ok. →メールを受け付けたことを示す quit<CR> ←接続終了 221 test-sample.jp closing connection. 下線の箇所がコマンドプロンプトから入力する内容。<CR>は、改行を示す。 |
送信したら、user1 のメールボックスフォルダにメールが届いているかどうかを確認する。追加処理プログラムの GetRecipentAddr.vbs によって、アドレスを出力するようにセットした mailaddr.txt ファイルにアドレスがしっかり記録されているか確認してみよう。
メールアドレスが取得できるようになっただろうか? あとは、目的または希望する内容に応じて、VB Script を書き換えてみればよいだろう。