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
こんな感じで無理やり対応しました。