これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks の無料ホスティング プロバイダーで実行できるコマンド gurgitate-mail です。
プログラム:
NAME
gurgitate-mail - 使いやすいメールフィルター
SYNOPSIS
ぐるぐるメール
DESCRIPTION
「gurgitate-mail」は、メールを読み取り、次の条件に従ってフィルタリングするプログラムです。
.gurgitate-rules.rb ホームディレクトリにあるファイル。 構成ファイルは Ruby 構文を使用します
したがって、非常に柔軟です。
通常、次のいずれかを介して呼び出されます。 。前方 ファイル:
"|/パス/to/gurgitate-mail"
またはあなたを通じて .procmailrc ファイル:
:0:
| /path/to/gurgitate-mail
あるいは、あなたがサイトのシステム管理者である場合、またはシステム管理者がフレンドリーな場合は、次のこともできます。
ローカル配送エージェントとして gurgitate-mail を使用します。 接尾辞の場合は、
mailbox_command=/opt/bin/gurgitate-mail
in /etc/postfix/main.cf。 他の MTA を使用し、gurgitate-mail を
地元の配送業者さん、方法を教えてください! これをドキュメントに含めたいと思います。
CONFIGURATION ファイル
gurgitate-mail で使用される設定ファイルは XNUMX つあります。XNUMX つはシステム全体に適用され、
XNUMX 番目はユーザー ルール ファイルです。
XNUMX つのシステム全体の構成ファイルは次のとおりです。 /etc/gurgitate-rules
/etc/gurgitate-rules-default。 これらはユーザー ルールの前後で処理されます。
。
/etc/gurgitate-rules システム全体のフィルタリングのニーズを処理するために使用されます: デフォルトの設定
メールボックスのスタイルをデフォルトの MBox ではなく Maildir に変更し、スプール ディレクトリを設定するなど
そうですね。
ユーザー設定ファイルは $HOME/.gurgitate-rules (または、代わりに、
$HOME/.gurgitate-rules.rb。 どちらの作品でも)。 ここに独自のルールを設定します。 ユーザーの場合
設定ファイルの処理中に「リターン」が発生しなかった場合、追加の
に含まれるルール /etc/gurgitate-rules-default 実行されます。 それも戻らなかったら、
その後、メール メッセージはデフォルトのメール スプールの場所に保存されます。
コマンドラインで「-f」オプションを使用すると、指定されたファイルが使用されます。
デフォルトのルールはそうではありません。 「-f」オプションは複数回使用できます。
グルギットメール -f テストルール -f 追加ルール
CONFIGURATION パラメーター
グルギットメールの送信方法を変更するために設定できるパラメータがいくつかあります。
振る舞います。 たとえば、次のように言って構成パラメータを設定します。
送信メール "/ usr / sbin / sendmail"
これにより、「sendmail」パラメータが「/ usr / sbin / sendmail".
メールディレクトリ
メールフォルダーを配置するディレクトリ。 デフォルトは $HOME/Mail です。
ログファイル
gurgitate-mail のログ メッセージの行き先。 標準的な位置は、
これは $HOME/.gurgitate.log です
sendmail
メールの配信に使用される sendmail プログラムへのフルパス。 これはどのプログラムでも構いません
これはパラメータとしてメールを配信するアドレスのリストを受け取り、それは
標準入力のメールメッセージ。
ホームディレクトリ
ホームディレクトリのフルパス。 これは実際の自宅がデフォルトになります。
ディレクトリは です。
スプールディレクトリ
システムのメールスプールが送信されるパス。 これのデフォルトは「/var/スプール/メール".
Maildir システムでは、これを「homedir」と同じに設定する必要があります。
スプールファイル
メール スプールのフル パスのメール スプール ファイル コンポーネント。 これは一般的には
あなたのユーザーネーム。 Maildir ユーザーはこれを「Maildir」に設定する必要があります。
フォルダスタイル
お好みのフォルダーのスタイル。 これは (現時点では) MBox または Maildir のいずれかになります。
フィルタ RULES
フィルター ルールは、次のメソッドと変数を含む一連の Ruby ステートメントです。
入手可能:
変数
from これには、電子メール メッセージのエンベロープ「差出人」アドレスが含まれます。 (これに注意してください
「From:」ヘッダーの内容と必ずしも同じであるとは限りません)
ヘッダーの
これはメッセージのヘッダーを含むオブジェクトです。 いくつかの方法があります
このオブジェクトに付属するもの:
body 電子メール メッセージの本文が含まれます。 今のところ、特に何もありません
これに割り当てる以外に、これでできることは興味深いものです。 書き換えることができます
この方法で電子メールメッセージの本文を作成します。 添付ファイルの処理は、
「ぐるぎたてメール」の今後のリリース予定。
メールディレクトリ
フォルダーを含むディレクトリ。指定時に「save」メソッドで使用されます。
フォルダーを「=」フォルダ" (Elm と同様)。デフォルトは "$HOME/Mail" です。
ホームディレクトリ
ホームディレクトリ。 読み取り専用。
ログファイル
「gurgitate-mail」ログファイルの場所。 「nil」に設定すると、ログは記録されません。
終わり。 デフォルトは「$HOME/.gurgitate.log」です。
sendmail
「sendmail」プログラムの場所。 「forward」メソッドで使用されます。 デフォルトは
"/usr/lib/sendmail".
スプールファイル
メールスプールの場所。 読み取り専用。
メソッド
一致(名前、正規表現)
ヘッダー「name」が正規表現「regex」と一致する場合、「true」を返します。 もし
"name" はヘッダー名の配列であり、少なくとも XNUMX つがヘッダー名の場合は true を返します。
ヘッダーが一致します。 「To:」と「Cc:」の両方のヘッダーが一致するかどうかをテストするのに役立ちます。
from 電子メール メッセージのエンベロープ「差出人」アドレスを返します。 これも同じであることに注意してください
裸の「から」として。
to 「To」と「Cc」の内容を含む HeaderBag (一種の配列) を返します。
ヘッダー。
to_s Ruby の規則に従い、すべてのヘッダーを「String」オブジェクトとして返します。
保存(郵便受け)
これにより、メッセージがメールボックスに保存されます。 = を使用してメールボックスを単語として指定できます。
その前に署名を付けます。この場合、それは「maildir」に置かれます。 を使用しない場合は、
=名 形式の場合は、絶対パス名を指定する必要があります。 書き込めない場合は、
リクエストしたファイルにメッセージを送信すると、「spoolfile」への書き込みが試行されます。
転送(アドレス)
これにより、電子メール メッセージが別の電子メール アドレスに転送されます。
パイプ(プログラム)
これにより、メッセージが「プログラム」を通じてパイプされます。 「pipe」は終了コードを返します。
メッセージがパイプで送信されたプログラム。
フィルター(プログラム)
これにより、「プログラム」を通じてメッセージがパイプされ、新しい Gurgitate オブジェクトが返されます。
フィルタリングされたメールが含まれます。 (これは電子メールを変更する外部フィルターに便利です
たとえば、スパムスコアヘッダーを追加する SpamAssassin など)。
あなたも言うことができます
フィルター(プログラム)を行う
# ここにコードを書きます
end
そして、新しく作成された Gurgitate オブジェクトをブロックに渡します。
ヘッダーの
これにより、ヘッダーが独自のオブジェクトとして返されます。 このオブジェクトには独自のメソッドがあります。
ヘッダー[*ヘッダー名]
これにより、要求したヘッダーを含む HeaderBag (配列のサブクラス) が返されます。
のために。 この結果に対して =~ 演算子を使用して、RHS 正規表現と一致させることができます。
HeaderBag 内のすべてのものを含めます。
「headers[name]=newvalue」でヘッダーの値を変更できます。
headers.match(名前,正規表現)
「name」という名前のヘッダーを正規表現と照合します。 これは以下と同じです
headers[name] =~ /regex/.
headers.matches(name,regex)
「names」という名前のヘッダーを正規表現と照合します。 これも同じです
headers[*names] =~ /regex/ として。
ヘッダー.から
から封筒を返します。 これは「headers.from=newaddress」で変更できます。
のためにペンを持つ時間も見つけています。
return
これにより、「gurgitate-mail」に電子メール メッセージの処理を停止するように指示されます。 使用しない場合
"return" を実行すると、"gurgitate-mail" は再度同じメールの処理を続行します。
次のルール。 最後に「戻る」がない場合 グルギタテ-ルール.rbをタップし、その後、
「gurgitate-mail」は、電子メール メッセージを通常のメール スプールに保存します。
ログ(メッセージ)
これにより、ログ メッセージがログ ファイルに書き込まれます。
SIMPLE 例
以下に、「ぐるぐるメール」ルールの例と説明をいくつか示します。
=~ /ebay.com/ からの場合、save("=ebay"); 戻る; 終わり
eBay からのすべての電子メール (オークション終了の自動通知、入札超過など)
通知) は「ebay」フォルダーにファイルされます。
=~ からの場合 /ルート@/ 次に save("=root"); 戻る; 終わり
(任意のホストの) ルートからの電子メールは、特別なフォルダーにファイルされます。 システム管理者にとって便利
crontab メールを監視しています。
if headers.matches(["To","Cc"],"webmaster@") then
save("=ウェブマスター")
return
end
To: または Cc: 行が「sysadmin」である電子メールは、「sysadmin」フォルダーに保存されます。 役に立つ
複数のロールアカウントを持つユーザーの場合は、自分のアドレスにリダイレクトされます。
if headers["Subject"] =~ /\[SPAM\]/ then
save("=スパム")
return
end
これは、ヘッダーに対してパターンを照合するための別の構文です。 合わせることもできます
角括弧内の複数のヘッダー。
if headers["Subject","Keywords"] =~ /悪い言葉/ then
save("=誓う")
return
end
件名とキーワードのヘッダーで「悪い単語」を検索し、存在する場合は保存します
「宣誓」フォルダ内のメール。
if headers.matches(["To","Cc"],"[メール保護]") それから
Pipe("|rcvstore +メーリングリスト")
return
end
メーリング リストへの電子メールはすべて、「rcvstore」を介してパイプ処理され、MH フォルダーに保存されます。
それ
headers.matches(["To","Cc"],/regex/)
このイディオムはよく使われるので、その略語があります。
if to =~ /[メール保護]/ それから
Pipe("|rcvstore +メーリングリスト")
return
end
「rcvstore」を通じてメールをメーリング リストにパイプします。
高度な 例
ここでは、何ができるかを示すために、もう少し賢い例をいくつか示します。
「ぐるぐるメール」。 というファイルに電子メールのホワイトリストがあるとします。
$HOME/.friends, したがって、一部の電子メールがスパムである可能性があるかどうかを判断できます。
ホワイトリスト上の誰かがあなたに電子メールを送信すると、それを自動的に保存します。
「受信箱」フォルダー:
friends=homedir+"/.friends"
FileTest.exists?(友達) と FileTest.readable?(友達) の場合
File.new(friends).each は |friend| を実行します。
=~ friends.chomp からの場合は、
ログ「友人からのメール」+friend.chomp
save("=受信箱")
return
end
end
end
さて、誰かがあなたにメールを送ってきて、それがあなた宛てに宛てられたものであるとします(そして、グルギット-
メールはまだ別の形式でそれを捕捉していません)、その場合、それはスパムである可能性があるか、そうでない可能性があります。
「灰色」のフォルダーに入れます。
my_addresses= [ /me@example\.com/i,
/me@example\.org/i、
/me@example\.net/i]; # メールアドレスが XNUMX つあります
my_addresses.each は |addr| を実行します。
if headers.matches(["To","Cc"],addr) then
save("=スパムではない可能性があります")
return
end
end
その後、それがあなたの知っている人からのものでなく、あなたのメールアドレス宛てに届いたものでもない場合は、
どちらかのアドレスを指定した場合は、それがスパムであると考えても問題ないでしょう。
save("=スパム")
return
ただし、これはベイジアン フィルターを使用することで改善できます。 たとえば、エリック・レイモンドの
ボゴフィルター プログラム (http://bogofilter.sourceforge.net) を自動的にトレーニングでき、
白/グレー/黒の区別を利用して使用されます。 上の例で言えば、
bogofilter への呼び出しを追加して調整します。
friends=homedir+"/.friends"
FileTest.exists?(友達) と FileTest.readable?(友達) の場合
File.new(friends).each は |friend| を実行します。
=~ friends.chomp からの場合は、
ログ「友人からのメール」+friend.chomp
Pipe("bogofilter -h") # <-- ここに行を追加しました
save("=受信箱")
return
end
end
end
「bogofilter -h」は、ホワイトリストに登録されている人からのメールが受信されないように bogofilter を訓練します。
スパムとみなされます。 さて、.gurgitate-rules の最後で、変更します
save("=スパム")
return
〜へ
save("=スパム")
パイプ("ボゴフィルター -s")
return
これは、フィルターの残りの部分を通過しないものはすべて「bogofilter」である必要があることをトレーニングします。
スパムとみなされます。 ここで興味深い部分について説明します。これらの間のビットを変更して使用します。
電子メールをスパムとみなすかどうかを決定する「bogofilter」:
my_addresses= [ /me@example\.com/i,
/me@example\.org/i、
/me@example\.net/i]; # メールアドレスが XNUMX つあります
my_addresses.each は |addr| を実行します。
if headers.matches(["To","Cc"],addr) then
if パイプ("ボゴフィルター")==1
その後
log("bogofilter はスパムではない可能性があると疑っています")
save("=スパムではない可能性があります")
ほかに
log("bogofilter はおそらくスパムだと考えています")
save("=スパム")
end
return
end
end
「bogofilter」の終了コードは、メッセージがスパムではないと判断した場合は「1」、スパムではない場合は「0」になります。
メッセージはスパムだと思います。
これで、どのようなものを使用できるかがわかると思います。
「ボゴフィルター」用。
onworks.net サービスを使用してオンラインでグルギタテメールを使用する
