Тогда хочу задать еще один вопрос, на конкретном примере.
Есть у меня задачка, нужно забирать почту с почтового ящика, смотреть наличие вложения и в зависимости от расширения файла сохранять его в определенный каталог, попутно записывать в лог что мы делаем. Вопрос, что в этом примере можно выделить как объекты и соответственно сделать соответствующий класс, или все таки в этом примере не имеет смысла использовать ооп. Ниже приведу код того как я это сделал естественно без ооп. заодно может укажите где и что я делаю не так.
# -*- coding: UTF-8 -*-
import email, poplib, email.Header, logging
from ConfigParser import ConfigParser
conf = ConfigParser()
conf.read( 'robot.conf' )
LOG_FILENAME = conf.get("Config","LOG_FILENAME")
SERVER = conf.get("Config","SERVER")
USER = conf.get("Config","USER")
PASSWD = conf.get("Config","PASSWD")
dir_ok = conf.get("Config","DIR_OK")
dir_spam = conf.get("Config","DIR_SPAM")
expansion = conf.get("Config","EXPANSION")
logging.basicConfig(filename=LOG_FILENAME,
level=logging.INFO,
datefmt='%a, %d %b %Y %H:%M:%S',
format='%(asctime)s %(message)s',)
def recode(title):
for text, enc in email.Header.decode_header(title):
try:
title= unicode(text, enc)
title= title.encode('UTF8')
return title
except TypeError, x:
print title, 'невозможно перекодировать ..', x
return title
logging.info('Start mailrobot--------------------------------')
p = poplib.POP3(SERVER)
print p.getwelcome()
print p.user(USER)
print p.pass_(PASSWD)
print '---------------------------'
response, lst, octets = p.list()
logging.info(response)
for msgnum, msgsize in [x.split(' ') for x in lst]:
resp, lines, octets = p.retr(msgnum)
msgtxt = '\n'.join(lines) + '\n\n'
msg = email.message_from_string(msgtxt)
subj = recode(msg['subject'])
fro = recode(msg['from'])
to = recode(msg['to'])
logging.info('{0:8s} {1}'.format('From :', fro))
logging.info('{0:8s} {1}'.format('To :', to))
logging.info('{0:8s} {1}'.format('Subj :', subj))
msg_parts = [(part.get_filename(), part.get_payload(decode=True)) for part in msg.walk()]
for part_name, part_file in msg_parts:
attach = recode(part_name)
if part_name != None and attach[-3:] == expansion:
print 'Attach :', attach, '[no spam]'
logging.info('{0:8s} {2} {1}'.format('Attach:', '[no spam]', attach))
f = open(dir_ok + attach, 'wb')
f.write(part_file)
f.close()
elif part_name != None:
print 'Attach:', attach, '[spam]'
logging.info('{0:8s} {2} {1}'.format('Attach :', '[spam]', attach))
f = open(dir_spam + attach, 'wb')
f.write(part_file)
f.close()
p.dele(msgnum)
logging.info('end----------------------------------------end')
p.quit()
logging.info('Stop mailrobot----------------------------------')
print 'stop'