title.png


矢文の概要

 矢文は、タスクトレイに常駐し、条件に一致するメールの自動処理を行うのが特徴の簡易メーラです。
 メールのソースに含まれる文字列で条件を設定し、条件に合致したメールに対して、削除/転送/返信を自動的に実行することができます。削除:スパムメールなどの自動削除、転送:セカンドメールアドレスに届いたメールをメインメールアドレスへ自動転送、返信:しばらく旅行に出る場合など不在通知の自動返信、等に使用できます。
 できないこと:閲覧できるのはテキストパートのみで、HTMLパートの閲覧はできません。添付ファイルを取り出したり実行したりすることはできません。メールを作成して送信することもできますが、単なるテキストメールだけで、HTMLメールの作成はできません。ファイルを添付するなどの処理はできません。受信したメールに返信する機能はありません。フォルダを作って受信メールを分類管理することもできません。
 メールの管理には、メインとなるメーラを別途ご用意いただき、矢文との併用をお勧めいたします。

 逆に言うと矢文自体は、添付ファイルを実行してしまったり、うっかりURLをクリックした時にそのページを開いてしまうこともないため、ウイルス/スパム/フィッシングメールを安全に処理することができます。
 ウイルス/スパム/フィッシングメールの特徴(差出人のメールアドレス、添付ファイルのファイル名、本文の文面、本文に記載されたフィッシングURLなど)を抽出して自動削除設定してしまえば、添付ファイルを開いて(実行して)しまう可能性のあるメインのメーラでのリスクを軽減することができます。
 この様に矢文は、初段のフィルタリングメーラとしては最適です。是非、導入をご検討ください。

シェアウェア

 矢文はシェアウェアです。シェアウェア登録されなくても矢文の機能は完全で、1ヶ月を目安として暫定的に矢文を試用することができます。試用期間を越えて利用する場合は、同梱のドキュメントに従って、作者まで送金して下さい。
 著作者は矢文を用いて生じたいかなる損害に対しても責任を負えませんので、あくまでユーザの責任において使用してください。

※送金する前に、必ず試用してください。


活躍シーン

 メールの管理はメインのメーラに任せますので、矢文は様々な自動処理によって、真価を発揮します。

1) スパムメールの自動削除

 全く知らない相手から送りつけられるスパム、添付ファイルを実行させてウイルスに感染させようとするウイルスメールを始め、何らかのサイトに登録したことによって自動的に届く不要なメールに至るまで、読む価値のないメールを自動削除することが可能です。
 すべてのヘッダを含むメールのソースリストに対して、文字列パタンの一致/不一致を条件とすることができるので、細やかな条件設定が可能です。

2) セカンドメール宛てに届いたメールをメインのメールへ自動転送

 家庭のネットワーク回線で使用しているプロバイダのメール、モバイルで使用しているプロバイダのメールなど、複数のメールアドレスができてしまった方もいるかもしれません。このようなセカンドメール宛てに届いたメールを自動的にメインのメールアドレスに転送して、一括して閲覧することが可能となります。

3) 受信メールへの自動返信

 「しばらく海外旅行に出る」場合など、特定の条件を満たしたメールに対して、不在通知など緊急性の高いメールを自動返信することが可能です。
 ただし、無条件にすべてのメールに返信するのは危険ですので、十分ご注意ください。スパムやウイルスメールに対して返信してしまうと、相手に対して不必要な情報を与えてしまうことになります。「登録したアドレスだけに返信する」など、条件の設定にご注意ください。


条件の記述例

 条件付き実行コマンドで指定可能な条件式のサンプルをいくつかご覧に入れます。矢文を使うと、どのようなことができるのか?と言う例題になると思います。

特定のメールアドレスから届いたメールを削除する

 "abc@def.co.jp"から届いたメールまたは、"xyz@stu.ac.jp"から届いたメールを自動的に削除するためには、以下の様な条件を記述します。

  @DELETE 不要
  +/^From: abc@def.co.jp
  +/^From: xyz@stu.ac.jp


 まず、@DELETEが見つかった段階で、条件値はfalseで始まり、メールソース中に「^From: abc@def.co.jp」が見つかると、「+/」なので、OR条件であり、false or true(「From: abc@def.co.jp」が見つかった)=trueとなります。見つからなかった場合、false or false(「From: abc@def.co.jp」が見つからなかった)=falseとなって、次の条件を評価します。同様に「^From: xyz@stu.ac.jp」が見つかればtrue、見つからなければfalseが、元の条件値とORされながら評価され、最終的にtrueになれば、@DELETEが実行され、メールが自動削除されます。
 メールソース中の「From:」は、差出人のアドレスが記述されているヘッダですので、"abc@def.co.jp"または"xyz@stu.ac.jp"から届いたメールを自動的に削除できるわけです。
 「+/」の場合、文字列中の半角英字に関して、大文字小文字を区別しませんので、「From:」、「FROM:」、「from:」等、大文字小文字が異なっても、一致(true)と判定されます。大文字小文字を区別して判定したい場合は、「+%/」という記号を使います。
 実行速度に目をつぶると、何行でも条件式を追加できるので、不要なメールを送ってくるアドレスをどんどん追加していくと、不要メールを自動削除することができます。

特定の題名で始まって、指定アドレス以外から届いたメールを削除

 次に、題名が「【お得ニュース】」で始まるメールで、差出人が"ghi@jkl.co.jp"では*ない*場合に削除する条件式をご覧に入れます。

  @DELETE スパム
  +/^Subject: 【お得ニュース】
  *!/^From: ghi@jkl.co.jp


 「*!/」は、AND条件で、否定条件ですので、差出人が"ghi@jkl.co.jp"では*ない*時にtrueとなります。
 全般に言えることですが、「Subject:」などの識別子の後ろには、複数の空白が続いているかもしれないので、以下のようにした方が揺らぎに強くなるかもしれません。

  +/^Subject:[ \t]*【お得ニュース】

 差出人「From:」についてはさらに、「表示名<ghi@jkl.co.jp>」のような記述があるかもしれないので、以下のようにした方が、条件に一致しやすくなります。

  *!/^From:.*ghi@jkl.co.jp

 ただ、この場合、条件を緩めているため、「abcd.ghi@jkl.co.jp」といった、別なアドレスも一致してしまいます。このようなケースを除くには、面倒ですが以下の様に記述することになります。

  *!(
  +/^From:[ \t]*ghi@jkl.co.jp
  +/^From:.*<ghi.jkl.co.jp>
  )

アドレス帳の特定カテゴリに含まれるアドレスから受信したメールを転送

 セカンドメールなどで、特定のアドレスから受信したメールをメインのメールアドレスに転送する書式です。

  @FORWARD <宛先アドレス>
  +/X-YaBumi:.*known_addr=3,
  */X-YaBumi:.*new_mail=1


 この例では、アドレス帳のカテゴリ3に含まれるアドレスから、新着メールを受信した時に、自動転送します。カテゴリ30〜39、300〜399などに合致しないように、3の後ろにカンマ(,)が記載されていることに留意してください。
 「new_mail=1」の条件が抜けると、メールがサーバから削除されない限り転送し続けてしまうので、ご注意ください。「new_mail=1」は新着メールを受信した最初の一回だけ、付加されるので、最初の一回だけ転送するかどうかを判定して実行することになります。
 @FORWARDの代わりに@FORWARDELを使うと、転送後、サーバから削除しますので、「new_mail=1」の条件は必ずしも必要ありませんが、一応記述しておいた方が無難でしょう(うっかり忘れて@FORWARDEL→@FORWARDに変更してしまうとまずいので)。

スパムメールの削除条件から、特定カテゴリのアドレスを除外

 スパムメールの条件を記述した後で、アドレス帳の特定カテゴリのアドレスから届いたメールを無条件で除外する書式です。

  @DELETE スパム
  +/〜〜〜
  +/<スパムメールの条件>
  +/〜〜〜
  *!/X-YaBumi:.*known_addr=2,

 この例では、アドレス帳のカテゴリ2に含まれるアドレスから届いたメールはスパムではないと判定するため、否定条件「*!/」を使用しています。
 and(*)、or(+)の演算優先順位は、常に「上から順に括弧で括られたのと同じ」、ですので、最後の行に記述した「*!/」の条件は、その上の行の条件全てにかかります。

特定アカウントの場合だけ、メールを転送

 条件ファイルは全てのアカウントに共通なため、普通に条件を設定してしまうと、全てのアカウントに同じ条件付きコマンドが実行されてしまいます。セカンドメールに届いたメールだけをメインのメールに転送したかったのに、メインのメールで受信したメールをメインのメールに転送してしまうと、自動転送が無限ループしてしまい、メール容量をパンクさせてしまいます。

  @FORWARD <メインのアドレス>
  +/〜〜〜
  +/<転送条件>
  +/〜〜〜
  */X-YaBumi:.*account=<セカンドメールのアカウント名>,
  */X-YaBumi:.*new_mail=1

 このように記述することで、セカンドメールに届いたメールだけがメインのメールアドレスに転送されるようになります。

本文中に特定の文字列を含むメールを削除

 条件の検索は、メールのソース全体に対して行われますので、From:、Subject:などのヘッダだけではなく、本文中の文字列も検索の対象となります。

  @DELETE
  +/お買い得情報


 この条件は、上の文面が、ソースのどこかにあれば、条件がマッチします。本文中でも、題名中でも、です。もし、「題名中だけ」に限定するなら、以下のようにします。

  @DELETE
  +/Subject:.*お買い得情報


 「本文中だけにある場合」は、ヘッダか本文かと言う切り分けが無いため、ちょっと難しいです。ヘッダの中で上の文面が登場するのが、題名(Subject:)だけだと仮定するなら、以下のようにすることは可能です。

  @DELEE
  +/お買い得情報
  *!/Subject:.*お買い得情報

メールの日付が一定以上古い場合に削除する

 メールソース中には、Date:ヘッダと言う物が含まれていて、メールの送信日時が記載されています。Date:ヘッダの日時から、現在時刻までの経過時間が、X-YaBumi:ヘッダに追加されています。

  X-YaBumi: el_min=xx, el_day=yy

 el_minはDate:ヘッダ時刻から現在時刻までの経過時間を分単位の整数(正数)で表示しています。el_dayは経過日数です。条件式では、文字列の一致/不一致で判定していて数値の大小比較はできないので、この様な数値の場合にはちょっと工夫が必要です。

  @DELETE
  +!(
  +/^X-YaBumi:.*el_day=[0-9][0-9],
  +/^X-YaBumi:.*el_day=[0-9],
  )


 この条件では否定条件「+!(」が使われています。一致条件自体は「経過日数el_dayが2桁の数字または、1桁の数字で表されている場合」です。まとめると、「el_dayが2桁の数字でも、1桁の数字でもなかった時に削除」となり、結果として、100日(←3桁以上の数字)以上経過したメールが削除されます。同様に、以下のケース。

  @DELETE
  +!/^X-YaBumi:.*el_day=[0-9],


 今度は「el_dayが1桁の数字」ですので、10日(←2桁以上の数字)以上経過したメールが削除されます。
 100日や10日など、10のべき乗を条件にするのはこの程度で可能なのですが、そうではない場合、例えば1週間(=7日)の場合はどうでしょうか?

  @DELETE
  +!/^X-YaBumi:.*el_day=[0-9],
  +/^X-YaBumi:.*el_day=[789],


 まず、最初の条件で10日以上のメールを削除します。2つ目の条件で7〜9日以上経過したメールを削除します。結果として7日以上経過したメールが削除できます。

 el_minを使うと分単位で経過時間を指定可能ですが、例えば、「36時間以上経過」の条件を作るには、36[時間]=36×60[分]=2,160[分]ですので、結構大変なことになります……。やってみましょう。

  @DELETE
  +!(
  +/^X-YaBumi:.*el_min=[0-9][0-9][0-9][0-9],
  +/^X-YaBumi:.*el_min=[0-9][0-9][0-9],
  +/^X-YaBumi:.*el_min=[0-9][0-9],
  +/^X-YaBumi:.*el_min=[0-9],
  )
  +/^X-YaBumi:.*el_min=[3-9][0-9][0-9][0-9],
  +/^X-YaBumi:.*el_min=2[2-9][0-9][0-9],
  +/^X-YaBumi:.*el_min=21[6-9][0-9],


 最初のカッコの中で、「5桁以上の数字=10,000分以上経過したメール」が削除できます。カッコ「)」の次の条件は、「3,000分以上経過したメール」、さらにその下は「2,200分以上経過したメール」、最後の行で「2,160分以上経過したメール」が削除されます。
 「最後の条件だけで良いのでは?」と、思われるかもしれませんが、最後の条件だけだと、2,160〜2,199分までの間のメールしか合致しませんので、2,200分以上経過したメールが削除できません。
 この様に「数値の大小比較」を条件にするのは結構しんどいので、例えば「36時間」という条件に固執せず、「36時間=2,160分≒2,000分」など、表現しやすい数値に丸めることができれば、多少、簡略化することができます。

  @DELETE
  +!(
  +/^X-YaBumi:.*el_min=1[0-9][0-9][0-9],
  +/^X-YaBumi:.*el_min=[0-9][0-9][0-9],
  +/^X-YaBumi:.*el_min=[0-9][0-9],
  +/^X-YaBumi:.*el_min=[0-9],
  )


 さっきの例と少し表現を変えて、すべての条件を「+!( )」の中に入れてみました。最初の条件で1,000〜1,999、2行目が100〜999、3行目が10〜99、最後が0〜9ですので、まとめると0〜1,999分以外の時(=2,000分以上の時)に削除します。

IPアドレスによるスパム判定

 メールを送る時に、各SMTPサーバが"Received:"というヘッダを追加して、どのSMTPサーバから受け取ったか?と言う履歴を残します。このヘッダ内に、送信してきたSMTPサーバのIPアドレス情報が含まれている場合があり、条件付き自動実行の際に追加される"X-YaBumi:"ヘッダ内の"recv_ip="という項目に、全てのIPアドレスがリストアップされています。
 スパムの発信に協力しているIPアドレスをブラックリストにしているサイトなどがありますので、ブラックリストに掲載されていた場合にそのメールを削除するように設定します。

  @DELSV
  +/X-YaBumi:.*recv_ip=[^,]*/123.456.78.9/
  +/X-YaBumi:.*recv_ip=[^,]*/24.68.13.579/


 ただし、ブラックリスト自体、誤って登録されるケースもあるようですし、時々刻々アップデートされているようです。ご利用は自己責任でお願いします。


download

home