MailUtl2 User's Manual

Copyright (C) 2002-2008 Fumio Kawamata

最終更新日: 2008年6月20日

Permission is granted to copy, distribute and/or modify this document titled "MailUtl3 User's Manual" under the terms of the GNU Free Documentation License Version 1.2(GNU FDL Version 1.2) published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

あなたは、「MailUtl2 User's Manual」と題するこの文書を、フリーソフトウェア財団発行の GNU Free Documentation License Version 1.2(GNU FDL Version 1.2)が定める条件の下で複製、頒布、あるいは改変することができます。

1. MailUtl2について

MailUtl2は、POPサーバ内のメールをスキャンし、指定した条件(送信者のメールアドレスやドメイン、メールサイズ、メールの種類(HTMLメール等)、メールの送信日付、その他)に合致したメールをPOPサーバから削除するプログラムです。ルールに合致するが、万一必要なメールである場合を考慮し、メールヘッダと、メール本文の指定行数(例えば20行)をファイルに記録するようになっていますので、あとで、要否判断をして、必要なら、送信者に再送してもらう等の処置が可能です。

[実例1]

MailUtl2は、プログラムのソースコード(Borland Delphi Version 6 Professional用)が添付されたフリーソフトウェアです。ソースコードはGNU General Public License Version 2(GNU GPL Version 2)のもとで複製、頒布、あるは改変することができます。

実行形式ファイルのバージョン情報が示す正式ファイル名は、MailUtl.exeとなっております。コマンドライン版のMailUtl.exe、本プロダクト、そしてその後継バージョンであるMailUtl3.exeと区別するため、本プロダクトの将来的正式名称はMailUtl2.exeとします。ただし、バージョン管理をろくに行ってなかったため、最後にプログラムを再構築した環境を再構成できない事態となってしまったため、本プロダクトリリースに際しては、ファイル名のみをMailUtl2.exeに変更してあります。次にリリースするバージョンでは、バージョン情報が示す正式ファイル名をMailUtl2.exeに設定します。

このドキュメントの最終更新年は、2008年ですが、MailUtl2.exe Version 2.0.0.8をコンパイルしたのは2006年1月14日です。ソースコードから再コンパイルしようにも、最後にコンパイルしたあとに開発マシンをリプレースしてしまい、通信を司る主要コンポーネントであるIndyのバージョンも変わってしまい、再コンパイルするためには、一旦Indyをアンインストールして、最新版をインストールし、Indyの仕様変更に応じてソースコードを見直すという一大作業になってしまいます。そのため、実行形式ファイルは旧バージョンのまま、ドキュメントを整備して公開し、そのあとで、開発環境を再整備して再コンパイルし、次のバージョンをリリースします。次回からは、プログラムをコンパイルできるIndyのバージョンを明記できるようにします。ソースコードから実行形式ファイルをコンパイルしたいユーザの方は、それまでお待ちください。

2. 著作権

2.1. 著作物の区分

MailUtl2を構成するファイルは、Fumio Kawamataに著作権があるファイルと、他者に著作権のあるファイルに分類されます。

2.2. Fumio Kawamataの著作物

Fumio Kawamataに著作権があるファイルのうち、プログラムについては GNU GPL Version 2 が、マニュアルについては GNU FDL Version 1.2 が適用されます。あなたは、これらのライセンスに従い、Fumio Kawamataに著作権のあるファイルを複製、頒布、あるいは改変することができます。

2.3. その他の人たち又はグループが著作権を有する著作物

  1. Indy ProjectのidPOP3.pas、idSMTP.pas、idMessage.pas、idGlobal.pas等を使用しています。(パッケージには同梱しておりません)。これらのファイルの著作権はChad Z. Hower (Kudzu) とIndyピットクルーに帰属します。idPOP3.pas idSMTP.pas, idMessage.pas, idGlobal.pas and some other files Copyright (C) 1993 - 2003, Chad Z. Hower (Kudzu) and the Indy Pit Crew。 - http://www.indyproject.org/.
  2. srcディレクトリ内の PzConv.* ファイルの著作権はPz factory氏に帰属します。PzConv.pas and readme.txt Copyright (C) Pz factory。(同梱して配布することについて、Pz factory氏の許諾を得ております。)
  3. srcディレクトリ内の BregExp.* ファイルの著作権はOsamu Takeuchi氏に帰属します。BRegExp.pas and BRegExp.hlp Copyright (C) Osamu Takeuchi All right reserved.(ヘルプファイルに、「本ユニットの著作権についてはとやかく言うつもりはありません。好きな ようにお使い下さい。」と記載されているので、Takeuchi氏には連絡無しで使用しています)。BRegExp.pas and BRegExp.hlp Copyright © Osamu Takeuchi All rights reserved.
  4. MailUtl2.exeと同一ディレクトリ内の BREGEXP.* の著作権はTatsuo Baba氏に帰属します。BREGEXP.DLL Copyright (C) Tatsuo Baba。(DLLのダウンロードページに「使用、配布に制限はありません。自由にお使いください。」と記載されていたので、Baba氏には連絡無しで使用しています)。BREGEXP.DLL Copyright © Tatsuo Baba All rights reserved.
  5. MemCheck.pas © Vincent Mahon and Jean-Marc Eber All rights reserved.

3. 再頒布または変更する場合の注意

受け取ったままの状態であれば自由に再頒布できます。Fumio Kawamata以外に著作権のあるファイルのみを取り出して再頒布したり、変更したりする場合は各著作者に問い合わせてください。

他サイトへの登録はご自由にどうぞ。事前あるいは事後の許諾を得る必要はありません。

雑誌の付録CD-ROM等に収録するのはご自由にどうぞ。事前あるいは事後の許諾を得る必要はありませ。見本誌はいただきません。

4. 問合せ先

MailUtl2あるいはこの文書についての問い合わせは fumio@my.email.ne.jp までお願いします。ただし、エンドユーザのADSLやケーブルネットワークから直接送信されたと思われるメール、表現を変えると、ISPや会社のメールサーバを経由せずに送信されたと思われるメールは読みません。(これらのメールは、後継バージョンであるMailUtl3によりspamメールとして識別しています)。

筆者はただの趣味のプログラマーで、プログラムやドキュメントは週末に書いてます。アクティビティは低いです。速攻応答は期待しないでください。

5. インストールとアンインストール

配布パッケージを展開する前に、MailUtl2をインストールするディレクトリを決めてください。解凍するディレクトリが、MailUtl2のインストールディレクトリとなります。MailUtl2はインストーラーを有しません。

MailUtl2の使用を終了するときは、展開した全ファイルと、後述するルールファイルとログファイルを手動操作により削除してください。MailUtl2は専用のアンインストーラーを有さないので手動で削除してください。

6. 使い方(初級編)

6.1. ルールファイルの作成

下記ルールファイル例 1のように、POPサーバから削除したい送信者のメールアドレスを記述した「ルールファイル」を用意してください。

ルールファイル例 1
username@a.domain
anotheruser@another.domain

ルールファイルは、任意のファイル名で任意の場所に保存可能ですが、将来のMailUtlのアップデートに備え、MailUtlをインストールしたディレクトリとは別のディレクトリに保存することを強くお奨めします。筆者は、ルールファイルをD:\Home\MailUtl\rule.txtに保存しています。

送信者個人のメールアドレスではなく、下記ルールファイル例 2のようにサブドメインやドメインを指定することもできます。

ルールファイル例 2
hostname.a.domain
domain

6.2. MailUtl2 の実行

ルールファイルを作ったら、MailUtl2.exeをダブルクリックしてください。すると、以下のようなフォームが表示されます。

[メインフォーム]

まず表示フォントを変更してください。表示フォントを変更するには、メニューバーの、[Option]、[Font]を順に選択します。フォントは、MSゴシック等の、等幅フォントを選択すると良いでしょう。

次は、動作設定を行います。動作設定を行うためには、メニューバーの、[Option]、[Settings]を順に選択します。すると、以下のようなフォームが表示されます。

[セッティングフォーム]

フォームの各テキストボックスに、下表を参考にして、設定情報を入力してください。Use MailUtl Rules は必ずチェックしてください。

設定情報
項目内容
HostnamePOPサーバ名を指定します。
PortPOPポート番号を指定します。デフォルトは110です。
User namePOPサーバに接続する際のユーザIDを指定します。
PasswordPOPサーバに接続する際のパスワードを指定します。
MailUtl2は、メモリ中にパスワードを平文のまま保持します
パスワードは.iniファイルには保存しません。プログラム終了時に破棄されます。
毎回入力するのが面倒な場合は、環境変数でパスワードを指定することもできます。
環境変数でパスワードを指定する方法は、使い方(上級編)にて説明します。
Log directoryMailUtl2が出力するログファイルの保存先(ディレクトリ)を指定します。
Rule filename先に作成したルールファイルを指定します。
Max linesMailUtl2は、メールを削除する際、先頭から指定した行数だけ、ファイルに保存します。
Max linesには、残したい行数(例えば20)を指定します。
行数を多くすると、メール全行を保存することになり、MailUtl2を利用する意味がありません。

設定情報を入力したら、[OK]ボタンをクリックしてください。

次に、[File]、[Check, then Keep connection]を選択してください。チェックするだけなので、削除は行いません。POPサーバに接続し、メールヘッダと、メール本文の一部を取得し、件名(Subject)や送信者アドレス(From)を一覧表示します。実際に筆者が実行したときの画面を以下に示します。

[実例 1]

MailUtl2の画面は、大きく分けて3つのエリアに分かれています。各エリアは下図のように、Area 1、Area 2、Area 3となっています。

[実例 1(エリア表示入り)]

以下、各エリア毎に、表示される内容について説明します。

Area 1は、メールの通し番号(No.)、メールに対する処理(Action)、メールの件名(Subject)、送信者のメールアドレス(From address)、送信日(Date)が一覧表示されます。Action列がDeleteになっているメールは、ルールファイルで指定した削除条件に合致したメールです。Action列がDeleteになっているメールは、目印として左端の列に赤色のバケツが表示されます。

Area 2は、メールの削除条件が表示されます。

Area 3は、メール本文(Body)とメールヘッダ(Header)の表示領域です。起動時には、Bodyが選択され、メール本文が、Max linesで指定した行数表示されますが、Headerタブをクリックすると、以下のように、メールヘッダが表示されます。

[実例 2]

Action列がDeleteになっているメールを削除するには、[File]、[Delete, then Disconnect]を順に選択します。実際に削除されます。

MailUtl2を終了するには、[File]、[Exit (Disconnect)]を順に選択してください。

6.3. ログファイル

MailUtl2は、先にLog directoryで指定したディレクトリに、以下のログファイルを保存します。

(1) ログ その1(HTMLファイル)

YYYYMMDD-HHMMSS-DEL.html形式(ただし、YYYYMMDDはプログラムを実行した西暦年月日、HHMMSSはプログラムを実行開始した時分秒)のファイルで、後述する、メール本文ファイル及びメールヘッダファイルをリンクしています。ログ その1をブラウザで表示した例を下図に示します。Full Headersをクリックすると、メールヘッダを表示します。Part of Bodyをクリックすると、メール本分(ただし、Max linesで指定した行数のみ)を表示します。淡いマゼンタ色で着色されている行が、削除されたメールを示します。白色及び若草色で着色されている行の意味はあとで説明します。

[ログブラウジング用HTMLファイルの表示例]

(2) ログ その2(テキストファイル)

YYYYMMDD-HHMMSS-DEL.txt形式(ただし、YYYYMMDDはプログラムを実行した西暦年月日、HHMMSSはプログラムを実行開始した時分秒)のファイルです。単に、メールの通し番号、件名(Subject)、送信者アドレス(From)を記録したものです。このファイルは、プログラムデバッグのために出力しているもので、通常は上記ログブラウジング用HTMLファイルをチェックしてください。

(3) メール本文ファイル及びメールヘッダファイル

*******-B.txt 及び *******-H.txt 形式(ただし、*******の部分はメールヘッダのMessage-Id)のファイルで、*******-B.txtは、メール本文、*******-H.txtファイルはメールヘッダです。メール本文は、Max linesで指定した行数のみ記録されています。これらのファイルは、先述した、ログ その1からリンクされていますので、通常は直接このファイルを閲覧する必要はありません。

7. 使い方(中級編)

7.1. ルールファイルのより柔軟な記述

初級編では単に削除したいメールアドレスやドメインを記述するだけでしたが、他の条件を記載することで、より柔軟な処理が可能になります。ルールファイルには、

  1. 判定文字列、メールサイズあるいは日数(メール送信日と現在日とのずれ)
  2. メールヘッダ内のフィールド、MsgSize、PastDateあるいはFutureDate
  3. Keep、Del、Continue等の操作コマンド

の3項目をTAB記号で区切って記述します。ルールファイルの記述例を下記に示します。なお、TAB記号は^Tで表現しています。

ルールファイル例 3
#
# コメントを記述する際は、行頭に#を記述してください。
#
# 特定のユーザ、ドメイン、あるいはメーリングリストからのメールアドレスを
# そのままPOPサーバに残す。
username@a.domain^T From:^T Keep
a.domain^T From:^T Keep
a-mailing-list^T X-ML-Name:^T Keep
#
# 特定のユーザあるいはドメインからのメールアドレスを削除する。
username@a.domain^T From:^T Del
a.domain^T From:^T Del
# 次のように単にメールアドレスだけを記述した場合は、 From:^T Delが
# 指定されたものとみなします。
username@a.domain
#
# 指定ドメインがFrom:行とMessage-ID:行の両方に含まれるメールを
# POPサーバに残す。(Continueの利用例)
a.domain^T From:^T Continue
a.domain^T Message-ID:^T Keep
#
# 自分宛でないメールを削除する。(!の利用例)
!myaddress@my.domain^T To:^T Continue
!myaddress@my.domain^T Cc:^T Del
#
# メールサイズが32000バイト以上のメールを削除する。
>32000^T MsgSize^T Del
#
# 送信日付が30日以上前のメールを削除する。
>30^T PastDate^T Del
#
# 送信日付が7日以上先(未来の日付)のメールを削除する。
>7^T FutureDate^T Del

MailUtlは、ルールファイルの記述順にルールを評価し、評価結果が真となった(KeepやDelを実行した)場合には評価を終了して次のメールを処理します。基本的には、ルールファイルの冒頭にはメールを保存(Keep)するように記述し、メールの削除(Del)はそのあとに記述するとよいでしょう。

ただし、メーリングリスト宛のメールを保存する場合には、注意すべき点があります。メーリングリスト宛のメールの中には、削除したい特定送信者からのメールが含まれる場合があります。この場合には、メーリングリストを保存(Keep)する記述の前に、特定アドレスを削除(Del)するように記述した方が有効です。

7.2. ルールファイル動作シミュレーション

[File]、[Delte Test, then Disconnect]を選択すると、ログファイルにはあたかもメールを削除したように記録が残りますが、実際の削除処理を行わないようになります。これにより、ルールファイルの記述が自分の意図通りになっているか確認することができます。

7.3. ログ その1の白色と若草色の意味

淡いマゼンタ色で着色されている行が、削除されたメールを示していることは先述したとおりです。若草色で着色されている行は、ルールファイルにて、Keepを指定したメールを意味します。白色で着色されいている行は、Del及びKeepのいずれにも該当しなかったメールを意味します。

8. 使い方(上級編)

8.1. コマンドラインオプション

MailUtl2のコマンドラインオプションを以下に示します。

コマンドラインオプション
オプション意味
-I設定ファイル名MailUtl2は、デフォルトでは、起動時に自身が存在するディレクトリに存在する設定ファイル(.iniファイル)を読み込みますが、-Iオプションにより、任意の.iniファイルを読み込みます。-Iと設定ファイル名にはスペースを入れないでください。

8.2. POP3パスワード

POP3パスワードは環境変数 "POP3_USERPASS" で指定することもできます。パスワードを環境変数で指定する場合は指定内容を他人に見られないように注意してください。(ちなみに、筆者は自宅でパソコンを自分一人で使っているので、環境変数で指定しています。)

8.3. 正規表現

判定文字列(パターン)に正規表現が使用できます。正規表現のレベルは、PERL5レベルです。Tatsuo Baba氏のBREGEXP.DLL及びOsamu Takeuchi氏のBREGEXP.pasを使用して機能を実現しています。以下のように、「\m/パターン/修飾子」スタイルで記述します。例えば、info@xxx.com(xxxは1文字以上の任意文字列)からのメールを削除するには、ルールファイルに以下のように記述します。

\m/info@.+\.com$/i^T From:^T Del

以下のように記述しても同一です。

\m/info@.+\.com$/i

パターン中に/を含めたい場合は、「m$パターン$修飾子」のようにします。

パターン中で使用できる主要メタ文字は以下のとおりです。

パターン中で使用できるメタ文字
メタ文字意味
\次のメタ文字をクォートする
^行の最初
.改行以外のすべての文字
$行末
|選択
( )グループ
[...]...の1文字
\w英数字と "_"
\W英数字と “”以外
\s空白文字
\S空白文字以外
\d数字
\D数字以外
\b単語境界
\B単語境界以外
\A文字列先頭
\Z文字列末尾
\tタブ
\n改行
\r復帰

パターン中で使用できる回数指定表現は以下のとおりです。

パターン中で使用できる回数指定表現
数量子意味
*0 回以上
+1 回以上
?1 回または 0 回
{n}n 回
{n,}n 回以上
{n,m}n 回以上 m 回以下

パターン中で使用できる修飾子は以下のとおりです。

パターン中で使用できる修飾子
修飾子意味
k文字を日本語(Shift JIS)として扱う(BREGEXP.dll独自機能)。
i大文字と小文字の区別をしない。

9. History(履歴)

10. Acknowledgement(謝辞)

idPOP3.pas、idSMTP.pas、idMessage.pas、idGlobal.pas等を公開されているIndyプロジェクトチーム(Chad Z. Hower (Kudzu) と Indy ピットクルー (Indy Pit Crew))に感謝します。

PzConv.pasを公開され、利用許諾をくださったPz factory氏、BREGEXP DLLを公開されているTatsuo Baba氏及びBREGEXP.pasを公開されているOsamu Takeuchi氏の各氏に感謝します。

プログラムの不具合報告、改善提案をいただいたユーザーさんに感謝します。

このプログラムのユーザーさん、このプログラムを紹介していただいている方(あるいは組織)に感謝します。

皆さん、ありがとうございます。

11. その他

11.1. 既知の問題

サーバに保存されているメールの通数が多い場合、MailUtl2が処理しているあいだに、新しいメールがサーバに届く場合があります。例えば、MailUtl2実行開始時はメールが100通だったのに、MailUtl2処理中に101通目が届くと、MailUtl2は101通目を処理しません。この場合、MailUtl2動作後にメールを受信すると、101通目のメールはMailUtl2のフィルタリングをすり抜けたように見ます。これはMailUtl2の不具合ではなく、POPの仕組み上回避不能です。

11.2. 予想される問題

ログ その1(HTMLファイル)の、charset属性を指定していないため、ブラウザによっては、ログが文字化けして表示される可能性があります。MailUtl(コマンドライン版)では、charsetを指定できるようにしてあるのですが、MailUtl2では、未実装です。