読者です 読者をやめる 読者になる 読者になる

CentOSでpymilterをインストールしたメモ(2)

以下のエントリの続き
CentOSでpymilterをインストールしたメモ - いわゆる備忘録

持ってきたpymilterのは以下にはサンプル(sample.py)が含まれている。
それを簡単に書き換えて使ってみる

設定

  • sample.pyを書き換える
# A simple milter.

# Author: Stuart D. Gathman <stuart@bmsi.com>
# Copyright 2001 Business Management Systems, Inc.
# This code is under GPL.  See COPYING for details.

import sys
import os
import StringIO
import rfc822
import mime
import Milter
import tempfile
from time import strftime
#import syslog

#syslog.openlog('milter')

class sampleMilter(Milter.Milter):

  def log(self,*msg):
    pass

  def __init__(self):
    pass

  def envfrom(self,f,*str):
    if f == 'hogehoge@example.com':
      self.setreply('500', '5.7.1', 'go home')
      return Milter.REJECT
    return Milter.CONTINUE

  def envrcpt(self,to,*str):
    return Milter.CONTINUE

  def header(self,name,val):
    return Milter.CONTINUE

  def eoh(self):
    return Milter.CONTINUE

  def body(self,chunk):
    return Milter.CONTINUE

  def eom(self):
    return Milter.ACCEPT

  def close(self):
    return Milter.CONTINUE

  def abort(self):
    return Milter.CONTINUE

if __name__ == "__main__":
  socketname = "/tmp/sample.sock";
  Milter.factory = sampleMilter
  Milter.set_flags(Milter.CHGBODY + Milter.CHGHDRS + Milter.ADDHDRS)
  sys.stdout.flush()
  Milter.runmilter("pythonfilter",socketname,240)
  print "sample milter shutdown"
  • Postfixの設定を修正する。

vi /etc/postfix/main.cf

smtpd_milters = unix:/tmp/sample.sock
/etc/init.d/postfix restart
  • sample.pyを起動する
nohup sudo -u postfix python sample.py &

確認

[root@localhost pymilter-0.9.8]# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 localhost.localdomain ESMTP Postfix
MAIL FROM: hogehoge@example.com
500 5.7.1 go home

go homeと言われてREJECTされたので、カスタマイズに成功したことがわかる。

今日はこれまで。