procmailの利用方法 †更新日 2023-11-13 (月) 09:46:13
SetUID †procmailにSetUIDが指定されていないと/var/spool/mailに新しいユーザにメールが来たときファイルが作成できないという問題があるが、SetUIDを行うと/etc/procmailrcにシステムに共通の設定をしたとき、spam対策として指定ディレクトリに自動配信させたとき、受信ファイルのオーナ、グループがrootとmailになりimapなどで問題がある。 ローカルに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通届き 本文中のキーワード処理 フラグ B 本文検索 :0 B * ^To: 4a.*@uso5004\.mie-chukyo-u\.ac\.jp$ [#z1715362] /dev/null 設定方法 †.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 $MAILDIR/msgid.cache msgid.cache というファイルにこれまで受信したメールの Message-ID を蓄積しておき、同一の Message-ID を持つメールが渡されてきた場合、そのメールを破棄します(-D オプション)。8192 という引数は msgid.cache というファイルを 8192 byte まで蓄積する。 W フラグは実行するコマンドの完了を待ち合わせ、かつ、コマンドが出力するエラーメッセージを無視する、という意味。コマンドの完了を待ち合わせるだけなら『w』フラグを指定。 h フラグは『条件にマッチしたメールを action に送る』という意味で、このフラグはデフォルトで設定されてる .procmailrc のレシピの先頭に記述し、 :0 [フラグ] [:ロックファイル] * 条件 動作 「:」を付けることで、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 | コマンドライン
指定メールだけ転送 :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\]' ! yokada@vmw.ism21.net :0 c # * ^Subject:.*=\?iso-2022-jp\? * ^Subject:\/.* * ? echo "$MATCH" | nkf -me | egrep '\[ism\]' ! yokada@vmw.ism21.net
参考 †
|