0

我正在使用 CentOS7 + sendmail + pymilter 来过滤垃圾邮件,目前正在定制已经在 pymilter pkg 中的 sample.py。

我的想法是在收到电子邮件后在主题前添加“[垃圾邮件]”。我想出了如何捕获正文和标题并区分哪个是垃圾邮件,但是更改标题非常困难。

pymilter 介绍它可以通过 eom 中的 headerchange 函数来更改主题或正文。所以已经给出的示例代码如下。

def _headerChange(self,msg,name,value):
  if value:   # add header
  self.addheader(name,value)
else:       # delete all headers with name
  h = msg.getheaders(name)
  cnt = len(h)
  for i in range(cnt,0,-1):
    self.chgheader(name,i-1,'')

def eom(self):
  if not self.fp: return Milter.ACCEPT
  self.fp.seek(0)
  msg = mime.message_from_file(self.fp)
  msg.headerchange = self._headerChange
  if not mime.defang(msg,self.tempname):
    os.remove(self.tempname)
    self.tempname = None      # prevent re-removal
    self.log("eom")
    return Milter.ACCEPT      # no suspicious attachments
  self.log("Temp file:",self.tempname)
  self.tempname = None        # prevent removal of original message copy
  # copy defanged message to a temp file 
  with tempfile.TemporaryFile() as out:
    msg.dump(out)
    out.seek(0)
    msg = mime.message_from_file(out)
    fp = BytesIO(msg.as_bytes().split(b'\n\n',1)[1])
    while 1:
      buf = fp.read(8192)
      if len(buf) == 0: break
      self.replacebody(buf)   # feed modified message to sendmail
    return Milter.ACCEPT      # ACCEPT modified message

我试图改变def _headerChange(self,msg,name,value)部分,因为它似乎与def eom(self)但它不起作用。

sample.py 文件的完整代码位于https://github.com/sdgathman/pymilter/blob/master/sample.py

我是否触摸了代码的错误部分?我做错了什么?

4

0 回答 0