Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2010 11:03:21

Ганж
От:
Зарегистрирован: 2010-04-28
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление писем с сервака

Добрый день. Суть проблемы такова: создаю класс, экземпляр которого берет письмо с почтового сервера, сохраняет вложения в заданную папку и в ней же создает конфиг вида:
phone = телефон (из темы письма)
imgcount = (количество вложений)


email = от кого
ip =


added = true

после чего письмо удаляется с сервера…
Но письмо не удаляется….))
Также, если будут советы по оптимизации, буду премного благодарен)))

код класса:

class MailClass():
def __init__(self):
self.box = poplib.POP3('10.0.0.88')
print (self.box.getwelcome())
print('connect to server... ', )
try:
self.box.user('user')
self.box.pass_('pass')
except:
print('authorisation with pop3-server failed')
print('Authorisation successful')

def __destroy__(self):
self.box.quit()

#uznaem kol-vo soobschenii
def getCount(self):
return len(self.box.list()[1])

def getMessage(self):
print('read message...')
response, lst, octets = self.box.list()
print ("DEBUG: Total messages: %s" % (len(lst)))
self.box.noop()
for msgnum,msgsize in [i.split() for i in lst]:
now = None
(resp, lines, octets) = self.box.retr(msgnum.decode('utf8'))
lines = [line.decode('utf8','ignore') for line in lines]
msgtext = "\n".join(lines) + "\n\n"
message = email.message_from_string(msgtext)
self.mailFrom = re.search(r"([\w_\-\.\d]{1,}@[\w_\-\.\d]{2,}\.[\w]{2,4})",message['From'],re.IGNORECASE|re.MULTILINE).group(1)
print('From: ', self.mailFrom)
try:
self.mailIp = re.search(r"\[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]",message['Received'],re.IGNORECASE|re.MULTILINE).group(1)
except:
self.mailIp = None
print('Ip = ', self.mailIp)
print('uidl = ', self.box.uidl(msgnum))

if email.message.Message.is_multipart(message): #proveryaem na vlozheniya
attachs = email.message.Message.get_payload(message)
i = 0
for part in attachs:
filename = part.get_filename()
if filename and re.match(".+\.(pdf|tif)$",filename,re.IGNORECASE): #esli rashirenie tif ili pdf, registr ignoriruem
i += 1
print (filename)
if not now:
now = getNowDir()
path = os.path.join(mainDir,now)
os.mkdir(path)
f = open(os.path.join(path, "faxmail" + now + "-"+ str(i) +"."+filename.split(".")[-1]), "wb")
f.write(part.get_payload(decode=1))
f.close

if now:
#sozdaem zadanie
config = configparser.RawConfigParser()
config.add_section('main')
config.set('main', 'phone', message['Subject'])
config.set('main', 'imgcount', i)
config.add_section('user')
config.set('user', 'email', self.mailFrom)
config.set('user', 'ip', self.mailIp)
with open(os.path.join(path, 'job.ini'), 'w') as configfile:
config.write(configfile)
run = Runner(now) #zapuskaem
self.box.dele(int(msgnum))
Если надо, могу выложить код главного модуля



Отредактировано (Апрель 28, 2010 11:04:27)

Офлайн

#2 Апрель 28, 2010 13:14:28

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Удаление писем с сервака

Ну в доке ясно сказано

Flag message number which for deletion. On most servers deletions are not actually performed until QUIT (the major exception is Eudora QPOP, which deliberately violates the RFCs by doing pending deletes on any disconnect).
А что такое __destroy__ ? вы наверное __del__ имели ввиду? но все равно не лучшее место для self.box.quit(), лучше у класса явный метод quit сделать.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Апрель 28, 2010 13:30:04

Ганж
От:
Зарегистрирован: 2010-04-28
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление писем с сервака

да)) действительно __del__ ))) большое спасибо, эта проблема решена :O



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version