#author("2023-11-13T09:46:13+09:00","default:okada","okada")
*procmailの利用方法 [#b8b7b5bb]

RIGHT:更新日 &lastmod();

**SetUID [#i9ef8583]
procomailにSetUIDが指定されていないと/var/spool/mailに新しいユーザにメールが来たときファイルが作成できないという問題があるが、SetUIDを行うと/etc/procmailrcにシステムに共通の設定をしたとき、spam対策として指定ディレクトリに自動配信させたとき、受信ファイルのオーナ、グループがrootとmailになりimapなどで問題がある。~
procmailにSetUIDが指定されていないと/var/spool/mailに新しいユーザにメールが来たときファイルが作成できないという問題があるが、SetUIDを行うと/etc/procmailrcにシステムに共通の設定をしたとき、spam対策として指定ディレクトリに自動配信させたとき、受信ファイルのオーナ、グループがrootとmailになりimapなどで問題がある。~
個人設定として.procmailrcとして設定した場合は不都合はでない。~
これはspamだけでなく配信を行うと発生するようだ。どちらの場合でも配信されない受信メールのユーザ、グループは正常に自分になる。~
対処方法は不明だが、/etc/procmailで共通設定にするときはprocmailにSetUIDは行わないようにする。

**ローカルにprocmailを利用するには [#vdfa5dcd]

''.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通届く

''本文中のキーワード処理''

フラグ B 本文検索 ~
「To: 4a.*@uso5004\.mie-chukyo-u\.ac\.jp$」の文字列が本文あると削除

 :0 B
 * ^To: 4a.*@uso5004\.mie-chukyo-u\.ac\.jp$ [#z1715362]
 /dev/null



**設定方法 [#k76a0350]
.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/.

***重複メールの削除 [#ra041c6d]

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

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

  :0 Wh: msgid.lock
  | formail -D 8192 $MAILDIR/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


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

-実際の.procmailrc
:0 cの「c」はメールは転送されてもそのメールも受信できるようする。「c」無いと転送され残らない

 指定メールだけ転送
 :0 c
 * ^Subject: \[ISM\].*
 ! yokada@vmw.ism21.net
 
 :0 c
 * ^Subject: \[ism\].*
 ! yokada@vmw.ism21.net
 
 # 以下はmimeで日本語対応
 :0 c
 # * ^Subject:.*=\?iso-2022-jp\?
 * ^Subject:\/.*
 * ? echo "$MATCH" | nkf -me | egrep '[ISM]'
 * ? echo "$MATCH" | nkf -me | egrep '\[ISM\]'
 ! yokada@vmw.ism21.net
 
 :0 c
 # * ^Subject:.*=\?iso-2022-jp\?
 * ^Subject:\/.*
 * ? echo "$MATCH" | nkf -me | egrep '[ism]'
 * ? echo "$MATCH" | nkf -me | egrep '\[ism\]'
 ! yokada@vmw.ism21.net

-$MATCHには「\/.*」が入る→Subjectが入る
-[ISM]または[ism]が入っていればOK。ただし nkf -e はEUCのため日本語は文字化けしているが問題ないと思う
-「^Subject:.*=\?iso-2022-jp\?」コメントで、日本語指定を外している。

**参考 [#o015a840]

-[[Procmail の紹介とレシピの書き方:http://www.jaist.ac.jp/~fjt/procmail.html]]
-UNiX MAGAZINE 1998 年 10 月号
-http://suken.jp/~tet/FreeBSD/procmail.rhtml

--------------------------------------------------------------------------------
RIGHT:[[元ページ:http://wwwism.dyndns.org/hp/linux/procmail.htm]]


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