メール振り分けでサーバ側にprocmailを導入している。 というか、相当昔に試しで入れたままになっていた。
当時はネットで調べた情報を適当に設定したのでprocmailの動作を理解していたわけではなかった。
ただやりたかった指定アドレスから来たメールを別メールアドレスに転送するためにだけ使っていたが 今回、うるさいスパムを直接読み捨てたり、指定のメールボックスに転送すべくしっかり調べてみた。
いやぁ、よく考えられていますね。 今更ながら、もうちょっと調べて使いこなせていればと思う次第。
ということで今回調べた範囲をメモがわりに残しておく。
基本のフォーマット
PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR LOGFILE=$MAILDIR/procmail.log # 転送すべき送信元リストを定義したファイル LIST=$HOME/.whitelist-mail # コメント :0 *$ ? test -s $LIST * ? (formail -x From: -x Reply-To: -x Sender: -x Return-Path: -x From | egrep -iqf $LIST) ! foo@example.com bar@example.com :0 * ^X-Senderauth-Result:.*fail .Junk/
条件部の制御フラグ
$
: シェルコマンドを実行する?
: コマンドの復帰コードで判定 0: OK 0以外: fail
配信先の制御
sendmailを使って別ユーザに転送
- 先頭に
!
をつけて宛先を定義する。 - スペース区切りで複数アドレスに転送可能
! foo@example.com
- 先頭に
MailDir型の別のフォルダに振り分ける
/
で終端させる- 一般的にフォルダ名の先頭は
.
で始まる(メールアプリには先頭の.
は削除されて表示されます) - Maildir特有の処理として 指定フォルダの
tmp
に配送後、new
フォルダに移動されます
.フォルダ名/
MH形式に振り分ける
- フォルダ名の最後に
.
をつける - フォルダ内のファイルをナンバリングして保存
フォルダ名/.
- フォルダ名の最後に
Mailboxに振り分ける
- ファイルへのパスを記述
- ファイルをロックする必要があるので先頭の
:0
にロック指定フラグの:
を追加する
:0 :
* ^X-Senderauth-Result:.*fail
Junk
コマンドを実行する
|
で始める(つまりパイプで処理する)| grep foo
実際には標準出力に結果が出されるだけなので役に立っていないが 本来は、役に立つコマンドを指定する
読み捨てる
/dev/null
を指定する/dev/null
入れ子でフィルタ処理を行う
{}
で囲って処理を記述する:0 #指定されたファイルを添付して自動返信する。 * ^Subject: foo.* { :0 * ^X-Senderauth-Result:.*pass passed/ :0 * ^X-Senderauth-Result:.*fail .Junk/ }