FreeBSD/ProcMail の変更点

  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • FreeBSD/ProcMail へ行く。

*&SIZE(15){''ProcMail''}; [#sc1102c5]

Procmailは電子メールの振り分けを行うのに便利なツールです。届いた電子メールを特定のものだけを他のアドレスに転送したり、~
SPAMをフィルタリング(削除や移動)することなども可能です。~
今回は[[vpopmail>FreeBSD/vpopmail]]と連携して使う方法を記述します。~

+[[''環境''>#A]]
+[[''インストール''>#B]]
+[[''.qmailの編集''>#C]]
+[[''.procmailの編集''>#D]]
+[[''procmailマニュアル''>#E]]
+[[''DoCoMoからのメールを転送''>#F]]

**''環境''&aname(A); [#re0c4012]
FreeBSD 6.0~
procmail-3.22_6~
~
**''インストール''&aname(B); [#hadf5ac3]
 # cd /usr/ports/mail/procmail/
 # make install clean ;rehash
~
**''.qmailの編集''&aname(C); [#tb3eaab9]
■vpopmailのユーザディレクトリが下記の状態だと仮定します。
 /usr/local/vpopmail/domains/mydomain.com/hoge
 ※mydomain.com=ドメイン名
 ※hoge=ユーザ名
■.qmailによりprocmailに噛ませるように設定する。
 # cat /usr/local/vpopmail/domains/mydomain.com/hoge/.qmail
 | /usr/local/bin/procmail -m ./.procmailrc

**''.procmailの編集''&aname(D); [#e3a2786d]
■メールヘッダに「^X-Spam-Status: Yes」とあればSpamフォルダに移動~
それ以外は、MAILDIRに移動という記述をする。~
※他にもprocmailはFromによって、転送したりコピーしたり~
 いろいろな使い方が出来る。vpopmailの場合ユーザへの編集環境を設定する必要がある。~
 # cat /usr/local/vpopmail/domains/mydomain.com/hoge/.procmail
 PATH=/usr/bin:/bin:/usr/local/bin
 HOME=/usr/local/vpopmail/domains/mydomain.comx/hoge
 MAILDIR=$HOME/Maildir
 DEFAULT=$HOME/Maildir/
 LOGFILE=$MAILDIR/procmail.log
 LOCKFILE=$MAILDIR/procmail.lock
 SPAM=$MAILDIR/.Spam/
 
 # Move it to the "caughtspam" mbox if it was tagged as spam
 :0
 * ^X-Spam-Status: Yes
 $SPAM

**''procmailマニュアル''&aname(E); [#x5e6f0e4]
ホームディレクトリに.procmailrc というファイルを置き、レシピを記述する事により設定を行います。~
これには、複数のレシピを記述することができ、一つのレシピは「:0」で始まり、「:0」かファイル終端(EOF)で終わります。~
また、行頭に "#"を記述することで、コメントを記述することもできます。~
~
レシピには大別して3つの事を記述します。
 フラグ    :Procmailにメッセージを渡す方法を指定 
 条件文    :処理を行うメッセージを特定 
 アクション  :条件に該当した場合に行う処理 
これとは別に、基本ヘッダというものがありますが、こちらで設定していますので特に記述する必要はありません。~
***''フラグ'' [#h30d4045]
 H    記述が省略された場合の動作。メッセージのヘッダだけを条件文に渡し、検査する。 
 B    メッセージの本文だけを条件文に渡し、検査する。 
 A    同じブロックレベルに記述されたAや、aの用いられてないレシピが該当した場合にだけ検査する。 
 a    Aと同様だが、手前のレシピが正しく実行された場合にだけ検査する。 
 E    Aの逆。手前のレシピが実行されなかった場合にだけ検査する。 
 e    aの逆。手前のレシピが失敗した場合に検査する。 
 h    アクション部にヘッダだけを渡す。 
 b    アクション部にメッセージの本文だけを渡す。 
 f    パイプをフィルタとみなす。つまり、前処理ができる。 
 c    メッセージのコピーを残す。これがなければ、元のメール加工してしまうため、次の処理の為に必要である。
      また、転送する際にもコピーを残しておかなければ、メールは転送先にのみ残る。 
 w    指定されたフィルタやプログラムが終了するまで待機し、処理に失敗した場合には検査を行わない。 
 W    wと同じだが、処理に失敗しても検査する。 
 i    あらゆる書きこみエラーを無視して検査する。 
 hb   なにも書かない場合の動作。アクション部にメッセージのヘッダと本体の両方を渡す。 
***''条件文'' [#g9fa5a44]
 !         条件の否定。条件を満たさなかった時に実行する。 
 $         条件文に現れる環境変数をシェルの様に評価する。 
 ?         指定したプログラムの終了コードを利用する。(0:成功、1:失敗) 
 <         長さが後に記述されたバイト数(10進)以上であれば実行する。 
 >         長さが後に記述されたバイト数(10進)以下であれば実行する。 
 変数名 ?? 指定された値と変数を比較する。 
 \         クォートする。\/と記述することで該当個所を変数MATCHに格納する。 
***''アクション'' [#r964a32b]
 !               指定されたアドレスに転送。スペースで区切る事により列挙可能。 
 |               メッセージを他のプログラムに渡す。 
 {..}            メッセージにあたらしい条件文を付加したい時や、
                 複数のアクションを実行したいときにカッコでくくる。 
 ファイル名       メッセージをファイルに格納する。ロック指定を忘れずに。 
 ディレクトリ名   メッセージにユニークなファイル名をつけてディレクトリに格納。 
 ディレクトリ名/. メッセージをディレクトリに連番形式で格納。 
 /dev/null       メッセージを廃棄。復元不可。 
***''procmail設定例'' [#h1700c75]
■特定のメールアドレスからのメールを転送する。~
この場合、@以下がgoodwill.com、ma21.ath.cxのメールとabc@docomo.ne.jpからのメールはhogehoge@ma21.ath.cxに転送されます。
 :0
 * ^From:.*(@goodwill.com|@ma21.ath.cx|abc@docomo.ne.jp)
 ! hogehoge@docomo.ne.jp
元のメールを残したまま転送したい場合には。~
cオプションをつけておきます。
 :0 c
 * ^From:.*(@goodwill.com|@ma21.ath.cx|abc@docomo.ne.jp)
 ! hogehoge@docomo.ne.jp
***''DoCoMoからのメール転送''&aname(F); [#oe27b4a7]
■携帯からのメールを転送する場合、Fromが送信者と違う為、迷惑メール対策でDoCoMoはなりすましメールとして[550 Unknown user ]で返されてしまいます。~
※筆者はDoCoMoユーザの為、DoCoMoしか分かりません。~
もしかしたら、AU、Vodafoneでも同じような事があるかも・・・~
 :0 c
 * ^From:.*ABC@docomo.ne.jp
 |grep -A50 'Content-Transfer-Encoding'|grep -v -E '(Content|X-Mailer)'|sed '1d'|mail -s 'ABCからメール' hogehoge@docomo.ne.jp
こんな感じで無理やり対応しました。