2009年4月22日水曜日

sSMTPとProcmailでメール転送

nbsmtpにSMTP AUTHをしゃべらせて利用してきたけど。。forwardingが必要になったので、fetchmail+procmail+nbsmtp
で、メールリレーをやろうと設定したけど、うまく動かんのぉ
どうもnbsmtpにはrecipientの引数が無く、メール本文の内容から、
TO:、CC:、BCC:
なんかを見分けて勝手に送ってしまう仕様になっている。ん~ん便利だけど。

※ちょっと解説アリ
sendmailなどがメールを送信する際にメール本文にあるTO:、CC:、BCC:とかは参照されない。つまりTO:、CC:、BCC:はsendmailにとって本来は不要な記述らしい。で、MUA(Netscapeとかねぇ)が、ユーザーの支持に従ってsendmailに引数(recipient)をくっつけて起動しメールを相手先に送りつけている。nbsmtpはMUAのやっていることを肩代わりする機能をもってるってことらいし。
※解説終り

でprocmailからnbsmtpを呼び出す際に、
nbsmtp 相手先アドレス
ってな形になってnbsmtpがエラーを吐いてしまう。
(エラーを出して終了して良かったぁ。もし引数を無視して送信動作をすると、メール本文にはTO:、CC:、BCC:などが沢山書いてあるのでメールループが発生してしまうところだった。怖え~:-)

ssmtpは、.tarをsourceforgeからGet。
./configure --prefix=どっか
make
make install
だけ。どっか/etc/ssmtp/ssmtp.confを
#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
# mailhub=mail
mailhub= SMTPサーバアドレス
# Where will the mail seem to come from?
#rewriteDomain=renesas.com
# The full hostname
hostname= 自分のドメイン名
FromLineOverride=YES

AuthUser= SMTPサーバのID
AuthPass= SMTPサーバのパスワード
AuthMethod=CRAM-MD5

ってな感じ。ちなみに、FromLineOverride=YESは、メール転送する際にメール本文のFromアドレスを書き換えないって設定。意味的にYESでは逆っぽいけど、デフォルトのNOだとFrom行が書き換えられてしまう。

.procmailrcは、
SENDMAIL=どっか/bin/ssmtp
SENDMAILFLAG=""
:0 c :
* ! 自分に届くようなMLを指定
! kenji.ogura.st@hitachi.com

ってな感じ。転送しなくても自分に届くようなメーリングリストがアドレスに含まれている場合は転送しない。