Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
if self.fp:
self.fp.close()
else:
return Milter.TEMPFAIL
try:
clam=os.popen("clamscanm <%s"%self.tempname,"r").read()
if clam.find("FOUND") != -1:
self.log(“virus rejected: %s” % clam)
self.setreply(“550”,’5.1.1',’VIRUS FOUND %s’ % clam)
return Milter.REJECT
except:
dbg_except()
self.log(“msg accepted: size=%s” % self.bodysize)
return Milter.ACCEPT
В этом методе вызывается программа clamscanm, принимающая файл на стандартный ввод и выводящая результат на стандартный вывод. Результат читается методом read() целиком и анализируется на присутствие подстроки «FOUND». Если есть такая строка, Milter устанавливает причину отказа методом setreply, пишет в лог и отклоняет сообщение. Так как все это происходит при установленном SMTP-соединении, отправитель получит «отлуп» сразу. Аналогично можно проверять почту на спам.
Следует отметить, что в процессе эксплуатации неаккуратно запрограммированный Milter может оставлять за собой временные файлы. Следующая небольшая программа на Python стирает оставленные Milter устаревшие файлы из каталога /var/tmp:
#!/usr/bin/python
import os, glob, time, stat
recent = time.time() - 60*20 # 20 min
for fl in glob.glob('/var/tmp/*.tmp'):
try:
if os.stat(fl)[stat.ST_MTIME] < recent:
os.unlink(fl)
except:
pass
Итак, Milter дает нам полный контроль над передачей сообщений на самом раннем этапе – этапе входящего SMTP-соединения. Фильтры можно писать на C/C++, Perl и других языках, тем не менее Python Milter отлично справляется с задачей.