procmailの利用方法

更新日 2023-11-13 (月) 09:46:13

ローカルにprocmailを利用するには

.forward

"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #username"

とする。(文法は不明、おまじないと思うこと)

ただし、転送指定をしているとそちらも同時に実行されるので、転送はprocmailで行う

たとえば、

.forward

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #okada"
okada@uso5004.abc-u.ac.jp

.procmailrc

# 特定のメールを消去
:0
* ^To: .*@xyz-u.ac.jp
/dev/null

:0   c
* ^From: .*
! okada@uso5004.abc-u.ac.jp

に設定すると

okada@abc-u.ac.jpあてはuso5004.abc-u.ac.jpに2通届き
okada@xyz-u.ac.jpあてはuso5004.abc-u.ac.jpに1通届く

設定方法

.procmailrcに以下のような内容を記入

# .procmailrcの設定例
# Log ファイルの指定
LOGFILE=$HOME/procmail.log
# メイルを保存するディレクトリの指定
MAILDIR=$HOME/Mail
DEFAULT=$MAILDIR/
# Lockファイルの指定
LOCKFILE=$HOME/.lockmail
# 以下条件の記述

# 特定のメールを消去
# SubjectにSPAMというキーワードのメールを削除
:0
* ^Subject: .*SPAM.*
/dev/null

# メールを他のアドレスへ転送する場合
#送信元がismを含むアドレスからのメールを転送
#レシピの1行目に :0 c と書くと、1通のメイルに複数のレシピを記述できる
:0 c   #ゼロの後ろに"c"を入れるとコピーが残る
* ^From: .*ism.*
! ism@xxx.ne.jp

# 特定のディレクトリに保存する場合
:0
* ^From: .*okada.*
$MAILDIR/okada/.

# 特定コマンドの実行
:0
* ^From: .*ism.*
| command

これらの設定を行うと一致いないものはメールボックスに残る。

その他の設定

# 未承諾広告※
:0D
* ^Subject:.*=\?[Ii][Ss][Oo]-2022-[Jj][Pp]\?[Bb]\?GyRCTCQ\+NUJ6OS05cCIo
junk/.
# 件名が変なもの
:0
* ^Subject:.*(penis|viagra|mortgage|rolex|sexy|prescription)
junk/.
# 件名が中国語のもの
:0
* ^Subject:.*=\?(big5|GB2312)\?
junk/.
# 本文が中国語のもの
:0
* ^Content-Type:.*(big5|GB2312)
junk/.
# 件名が韓国語のもの
:0
* ^Subject:.*=\?(euc-kr|ks_c_5601-1987)\?
junk/.
# 本文が韓国語のもの
:0
* ^Content-Type:.*(euc-kr|ks_c_5601-1987)
junk/.

重複メールの削除

メーリングリスト等に参加している場合、To: が自分のメールアドレスで、 Cc: が自分が参加しているメーリングリスト、この場合、同一の Message-ID を持つメールを 2 通受け取ることになるが、 procmail ではこのような重複メールを自動的に削除することが出来るようだ。

以下の設定をspamチェック等の前、一番初めに入れる?とうまくいった

 :0 Wh: msgid.lock
 | formail -D 8192 msgid.cache

msgid.cache というファイルにこれまで受信したメールの Message-ID を蓄積しておき、同一の Message-ID を持つメールが渡されてきた場合、そのメールを破棄します(-D オプション)。8192 という引数は msgid.cache というファイルを 8192 byte まで蓄積する。

W フラグは実行するコマンドの完了を待ち合わせ、かつ、コマンドが出力するエラーメッセージを無視する、という意味。コマンドの完了を待ち合わせるだけなら『w』フラグを指定。

h フラグは『条件にマッチしたメールを action に送る』という意味で、このフラグはデフォルトで設定されてる

.procmailrc のレシピの先頭に記述し、 msgid.cache というファイルを touchしておく。 msgid.cache は自動作成される


:0 [フラグ] [:ロックファイル]

* 条件
動作

「:」を付けることで、procmail に排他処理(ロック処理)を行うよう指示する
ことができる。この場合は「:」の後のロックファイル名を省略すると、
procmail が勝手にロックファイル名を決めてくれる。

フラグ
フラグにはメッセージを処理する際のProcmailへのメッセージ(メール)の渡し方を記述します。フラグの記述には以下のものがあります。

フラグについて

H:記述が省略された場合の動作。メッセージのヘッダだけを条件文に渡し、検査する。
B:メッセージの本文だけを条件文に渡し、検査する。
A:同じブロックレベルに記述されたAや、aの用いられてないレシピが該当した場合にだけ検査する。
a:Aと同様だが、手前のレシピが正しく実行された場合にだけ検査する。
E:Aの逆。手前のレシピが実行されなかった場合にだけ検査する。
e:aの逆。手前のレシピが失敗した場合に検査する。
h:アクション部にヘッダだけを渡す。
b:アクション部にメッセージの本文だけを渡す。
f:パイプをフィルタとみなす。つまり、前処理ができる。
c:メッセージのコピーを残す。これがなければ、元のメール加工してしまうため、次
の処理の為に必要である。また、転送する際にもコピーを残しておかなければ、
メールは転送先にのみ残る。
w:指定されたフィルタやプログラムが終了するまで待機し、処理に失敗した場合には 
検査を行わない。
W:wと同じだが、処理に失敗しても検査する。
i:あらゆる書きこみエラーを無視して検査する。
hb:なにも書かない場合の動作。アクション部にメッセージのヘッダと本体の両方を渡す。

アクション

! メールアドレス~ 指定したメールアドレスに転送します。複数のアドレスを指定することもできます。

指定だけメール転送

#指定メールだけ転送
:0 c   <---cはコピーも残す
* ^Subject: \[ISM\].* <---[は\(エスケープ文字)が必要
! okada@abc.ac.jp

| コマンドライン
コマンドラインの標準入力にパイプします。

参考


元ページ

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS