Re: [Solved] Разрешение на отправку почты в зависимости от списка

От: Заславский Андрей <CGatePro_at_mx_ru>
Дата: Thu 04 Dec 2008 - 15:56:27 MSK

Да ладно, благое дело делают.
У нас просто из конторы дофига инфы уплывало, как они грят. Хотя хз. В общем дело сделано :) и я этому рад.

-------- Исходное сообщение --------
От: Nazarkin Andrew <CGatePro@mx.ru>
Обратный адрес: CommuniGate Pro Russian Discussions <CGatePro@mx.ru> Кому: CommuniGate Pro Russian Discussions <CGatePro@mx.ru> Тема: Re: [CGP] [Solved] Разрешение на отправку почты в зависимости от списка
Дата: Thu, 04 Dec 2008 13:13:00 +0300
Почтовый клиент: CommuniGate Pro MAPI Connector 1.52.5.1/1.52.5.2

Поздравляю! :)
А долбодятлов безопасников надо с сачками было поставить на шлюзе, чтобы ловили письма сами :) Насоздают проблем, а ты выкручивайся :)

Назаркин Андрей Николаевич
MRG LIFE. Deputy Head of IT
Mezhregiongarant. Head of IT
email: su@mrglife.ru, su@mrggroup.ru
work tel: (495) 649-3010 #2205
mob. tel: (916) 814-3459

fax:            (495) 649-3277
sip:             3377615


-----Original Message-----
From: CommuniGate Pro Russian Discussions [mailto:CGatePro@mx.ru] Sent: Thursday, December 04, 2008 12:18 PM To: CommuniGate Pro Russian Discussions
Subject: [CGP] [Solved] Разрешение на отправку почты в зависимости от списка

Решил таки свою задачу, и публикую на всякий случай. Дано: коммунигейт, пачка юзеров.
Есть указание сделать возможной отправку почту за пределы своего домена только для указанных лиц.
Решил написав хелпер на питоне.
Код внизу.
в файле whitelist живет список адресов вида user@domain.com для фильтрации сотворено правило, гласящее, что хелпер применяется для писем из нашего домена в не наш :)
Ну и на всякий случай такие исходящие письма копируются в нужную папочку :)
Comments welcome ;)

код:
#!/usr/bin/python
# -*- coding: utf8 -*-
import sys,string,time,shutil
whitelist='/var/CommuniGate/mailfilter/whitelist' logfile='/opt/CommuniGate/test/pylog.log' FILE = open(logfile,"w")
FILE.write('starting..\n')
def checksender(sendermail):

    f = open(whitelist,"r")
    try:

        for line in f:
                if sendermail.lower()==line.strip():
                    return 1
    finally:
        f.close()

    return 0

def getsenderaddress(filename):

    #got msg.file
    msgfile = open(filename,"r")
    while 1:

        t=msgfile.readline()
        if t=='': return 0
        tlist=t.split();
        if (tlist[0]=='P') and (tlist[1]=='I'): return
tlist[7].strip('<>')

    msgfile.close()
    return 0

while 1:

   t=sys.stdin.readline()
    plist=t.split()
    FILE.write(t)
    FILE.flush()
    if plist[1]=='INTF':

        time.sleep(1)
        sys.stdout.write(plist[0]+' INTF 2\n')
        sys.stdout.flush()

    if plist[1]=='FILE':
        shutil.copyfile(plist[2],
'/opt/CommuniGate/test/archive/'+plist[0])
#       print plist[0]+' OK'
        if checksender(getsenderaddress(plist[2]))==1: print plist[0]+'
OK'
        else:
            print plist[0]+ ' ERROR
Вы_не_можете_отправлять_почту_за_пределы_домена'
        sys.stdout.flush()

    if plist[1]=='QUIT':
        print plist[0]+' OK'
        sys.stdout.flush()
        sys.exit(0)



# print (getsenderaddress('./archive/1.msg')) FILE.close() Получено Thu Dec 04 12:56:12 2008

Этот архив был сгенерирован hypermail 2.1.8 : Thu 04 Dec 2008 - 16:14:20 MSK