我正在使用 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
我是否触摸了代码的错误部分?我做错了什么?