ライン

ポイント:到着した電子メールの振り分けや自動転送

ライン

 はじめに

mail/procmail

 到着した電子メールの振り分けなどを実施するときに活躍するのがProcmailです。
FreeBSDのメールに連動させて動作させる方法で設定します。

 導入と設定

導入

 早速、導入を開始します。portsから導入を行います。

# cd /usr/ports/mail/procmail
# make clean BATCH=YES install clean

 現在までに、まだ Sendmailを何も設定していない場合には、事前に設定ファイルを準備するために、

# cd /etc/mail
# make all

実行すると、以下のようなファイルが作られてきます。HOSTNAME.example.ne.jpは、そのホスト名+ドメイン名と読み替えてください。

HOSTNAME.example.ne.jp.mc
HOSTNAME.example.ne.jp.submit.mc
設定ファイルの作成 (/etc/mail)

HOSTNAME.example.ne.jp.mcに以下を加えます。

FEATURE(local_procmail_lmtp,`/usr/local/bin/procmail',`procmail -t -Y -a $h -z')dnl

のようにして使うことにしました。
以下のように、必要なファイルをコピーしておきます。

# cp -p /usr/local/share/examples/procmail/local_procmail_lmtp.m4 /usr/share/sendmail/cf/feature

 以前のホームページの内容には、Procmailのレシピの記述も書きましたが、多くの方のページがありますから、今回のページでは割愛します。

 今回のページでは、.mcファイルについての詳細を記述するページとしようと思います。

RELAY_DOMAIN_FILE(`/etc/mail/relay-domains')dnl
define(`confCW_FILE', `-o /etc/mail/relay-domains')dnl

という行を入れて、扱えるドメインを制限します。DNS上でメールのMXレコードが自分HOSTを指しているもののドメイン名を以下に書いておきます。

/etc/mail/relay-domains

上記ファイルには、1ドメインに1行を記述します。

example.ne.jp
example.com

のように。

FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')

/etc/mail/accessには、SPAM対策を多少記述しています。

example.ne.jp                   RELAY
example.com                     RELAY
From:nobody@                    REJECT
From:spam.exmaple.co.jp         550 User unknown
From:example.info               DISCARD
yahoo.example.name              550 We don't accept mail from spammers

のように方針を決めて記述します。
扱うドメインは RELAYを書いておく必要があります。

/etc/mail/mailertableには、上記同様に、ドメインごとの配送する内容を記述します。

.example.ne.jp     local
.example.com       local

当然ここで、procmailの指定をすれば、Procmailで処理されます。

.example.ne.jp      procmail:/etc/mail/procmailrcs/example.ne.jp 

のように。
この設定ファイルには、ドメイン用にどうするかを記述できるので、個人専用のドメインなどではうまくルールをレシピで記述すれば便利に使えそうです。

 また、.mcファイルの記述に戻ります。

FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')

これは、バーチャルドメインをローカルのアカウントとマッピングするために使うなどがあります。

postmaster@example.ne.jp     foo
webmaster@example.ne.jp      error:  550 User unknown
@example.com                 person1

上記の例で、 example.com 宛のメールはすべて person1 のアカウントに届きます。

define(`confTO_IDENT', `0s')dnl
FEATURE(always_add_domain)dnl
define(`ALIAS_FILE',`/etc/mail/aliases,/usr/local/etc/mail/aliases')dnl
define(`confMAX_MESSAGE_SIZE',`52428800')dnl 50MB
define(`confSMTP_LOGIN_MSG', 'secret')dnl

 ここら辺の説明は割愛します。
50MB以上のメールなんて送るな!みたいな記述などです。aliasesも1つしかない人は、1つだけを記述になります。
 必要なレコードを書いて、make all restart で反映して動き出します。

 個人ごとの .procmailrc の設定などについては、また時間があるときに更新する予定です。
私のケースでは、Bogofilter やSpamAssassin などで該当するものを、フリーメールのアドレスへ転送していたりを入れています。

smtpfeed

 SMTP feedを導入する例を毎度で加えておきます。ここは趣味の世界です。

# cd /usr/ports/mail/smtpfeed
# make install clean

で導入できます。

**************************************************************
smtpfeed is installed into /usr/local/libexec/smtpfeed.
You'll need to perform 2 steps, (a) to (b), to make smtpfeed
work:
        (a) replace /etc/mail/sendmail.cf
        (b) setting up /etc/syslog.conf

(a) depends on what kind of configuration tool you are using
with sendmail.cf.  Read through documentation in
/usr/local/share/doc/smtpfeed for details.
(b) see file named INSTALL in
/usr/local/share/doc/smtpfeed for details.
**************************************************************

 上記のようにメッセージが書かれていますので、ご参照ください。

バージョンは、smtpfeed-1.21 が最終版となっています。

.mcファイルの記述は同様に、

FEATURE(nocanonify)dnl
MAILER_DEFINITIONS
Msmtpf, P=/usr/sbin/smtpfeed, F=mDFMuXz!_, S=11/31, R=21, E=\n,
        L=990, T=DNS/RFC822/SMTP, M=50000, *=5, A=smtpfeed -l local5
MAILER(smtp)dnl
define(`SMART_HOST', `smtpf:LMTP')dnl
LOCAL_CONFIG
# These rules should be inserted to the top of S95
S95
R< smtpf : LMTP > $*<@$*>$*   $#smtpf$@LMTP$:$1<@$2>$3$#smtp$@$2$:$1<@$2>$3
R< smtpf : $* > $*            $#smtpf$@LMTP$:$2$#smtp$@$1$:$2
R< smtpf > $*<@$*>$*          $#smtpf$@LMTP$:$1<@$2>$3$#smtp$@$2$:$1<@$2>$3

のように追加します。

これは、/usr/local/share/doc/smtpfeed 以下の INSTALL.j に書かれている通りの内容です。
/etc/mail/mailertable には、smtpf:LMTP な記述と差し替えて利用することで適用できます。

ファイルをtouchしておきます。

# touch /var/log/smtplog

/etc/syslog.conf を修正します。

local5.info                                     /var/log/smtplog

を加えました。
syslogd に再スタートシグナルを送って反映させて完了です。

# kill -HUP `cat /var/run/syslog.pid`

これで反映されました。

【改訂履歴】作成:2009/02/15
2009/06/02 … Namazu検索の窓を追加
2013/03/30 … 少し更新したタイミングで修正しました
【参考リンク】
Procmail Homepage … Procmailのオフィシャルページ

Copyright © 1996,1997-2006,2007- by F.Kimura,