Skip to content

Instantly share code, notes, and snippets.

@ahgood
Forked from nishinoshake/readme.md
Created July 5, 2017 04:40
Show Gist options
  • Save ahgood/54d18564058d5ebb46713b72d7376d18 to your computer and use it in GitHub Desktop.
Save ahgood/54d18564058d5ebb46713b72d7376d18 to your computer and use it in GitHub Desktop.
PostfixとProcmailで迷惑メールの振り分け

Procmailとは

メールの振り分けをしてくれるソフトウェア。
設定ファイルにルールを記載するとよきに計らってくれる。

インストール

yum install procmail

Postfixの設定

# procmailのパス調べる
which procmail
=> /bin/procmail

# main.cfに追記する
vi /etc/postfix/main.cf
mailbox_command = /bin/procmail

# postfix再起動
systemctl restart postfix

Procmailのレシピ設定

vi ~/.forward
"|IFS=' ' && exec /bin/procmail -f- || exit 75 #username"

chown username:username ~/.forward

vi /home/username/.procmailrc

# ここにレシピを記載する

レシピの概要

基本的には、始まり・条件・アクションの3行。
条件が複数の場合は複数行で記載する。

:0フラグ
*条件の正規表現
アクション

フラグ

:0 から始まる行は始まりの合図。
フラグをつけて実行モード的なものを設定できる。

  • H デフォルト(ヘッダだけ)
  • B ボディだけ
  • HB ヘッダとボディの両方
  • D 大文字と小文字を区別
  • c コピーを残す
  • f パイプをフィルタとみなす。前処理できる。
  • w プログラムの終了を待つ。
  • :[ロックファイル] ロックファイルを使えます。

ロックファイルとは
排他処理に使うファイル。使用中のフラグ的な。

:0fw

条件

正規表現で条件を書く

*^from:.*hoge

アクション

条件に一致したやつをどうするか

  • ! 指定したアドレスに転送
  • | プログラムの実行(標準入力に処理したやつがはいる)
  • ディレクトリ ディレクトリに格納する
  • /dev/null メッセージ破棄

$SPAMDIR

シンプルなレシピの例

Fromにspamの文字を含むメールをspamディレクトリにいれる。

vi /home/username/.procmailrc

# 環境変数設定
SHELL=/bin/bash
PATH=/bin:$HOME/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAMDIR=$MAILDIR/spam/
LOGFILE=$MAILDIR/log/procmail.log

# シンプルなレシピ設定
:0
*^from:.*spam
$SPAMDIR

# SpamAssassinを実行させる
# f 処理をパイプ
# w コマンドの実行が終わるまで待つ
# spamassassin.lockという名前のロックファイルを使う
# spamcというのはspamassassinのクライアント
:0fw: spamassassin.lock
|/bin/spamc

# Spamと判定されたメールをSpamディレクトリへ
:0
*^X-Spam-Flag: YES
$SPAMDIR

参考

http://www.jaist.ac.jp/~fjt/procmail.html https://linuxjm.osdn.jp/html/procmail/man5/procmailrc.5.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment