freeway
Сен. 1, 2009 13:43:19
Всем привет!!! Есть вот такая (описана в заголовке) задача. Я вообще пишу на с++, но там это сложно, как не бился не могу перекодировать, посоветовали на пайтоне.
Вот письма проверяю так:
import poplib, email, sys
# Учетные данные пользователя:
SERVER = “11111”
USERNAME = “1111”
USERPASSWORD = “111111”
p = poplib.POP3(SERVER)
print p.getwelcome()
# этап идентификации
print p.user(USERNAME)
print p.pass_(USERPASSWORD)
# этап транзакций
response, lst, octets = p.list()
print response
for msgnum, msgsize in :
print “Сообщение %(msgnum)s имеет длину %(msgsize)s” % vars()
print “UIDL =”, p.uidl(int(msgnum)).split()
if int(msgsize) > 32000:
(resp, lines, octets) = p.top(msgnum, 0)
else:
(resp, lines, octets) = p.retr(msgnum)
msgtxt = “\n”.join(lines)+“\n\n”
msg = email.message_from_string(msgtxt)
print “* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n” % msg
# msg содержит заголовки сообщения или все сообщение (если оно небольшое)
# этап обновления
print p.quit()
#нашел также как ложить в определенный каталог:
msg = email.message_from_string(msgtxt)
for part in msg.walk():
if part.get_content_maintype() == ‘multipart’:
continue
filename = part.get_filename()
if not filename:
continue
fp = open(filename, ‘wb’)
fp.write(part.get_payload(decode=1))
fp.close()
не понятно где тут сохранение файла в каталог????
и остался вопрос по декодированию с UUE
Подскажите пж
igor.kaist
Сен. 1, 2009 13:57:07
про uue смотри модуль
mimetools
freeway
Сен. 1, 2009 15:04:48
пойдем пошагово, вот пытаюсь стащить атач:
import sys
import getopt
import errno
import mimetypes
import mimetools
import email
import poplib
# Учетные данные пользователя:
SERVER = “1111111111”
USERNAME = “11111111”
USERPASSWORD = “111111111111111”
p = poplib.POP3(SERVER)
print p.getwelcome()
# этап идентификации
print p.user(USERNAME)
print p.pass_(USERPASSWORD)
# этап транзакций
response, lst, octets = p.list()
print response
for msgnum, msgsize in :
print “Сообщение %(msgnum)s имеет длину %(msgsize)s” % vars()
print “UIDL =”, p.uidl(int(msgnum)).split()
if int(msgsize) > 32000:
(resp, lines, octets) = p.top(msgnum, 0)
else:
(resp, lines, octets) = p.retr(msgnum)
msgtxt = “\n”.join(lines)+“\n\n”
msg = email.message_from_string(msgtxt)
#print “* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n” % msg
for part in msg.walk():
if part.get_content_maintype() == ‘multipart’:
continue
filename = part.get_filename()
if not filename:
continue
fp = open(filename, ‘wb’)
fp.write(part.get_payload(decode=1))
fp.close()
выдается ошибка -
Traceback (most recent call last):
File “D:\phyton\unpackmail.py”, line 33, in <module>
for part in msg.walk():
NameError: name ‘msg’ is not defined
не пойму как это name ‘msg’ is not defined
а это чем не определение- msg = email.message_from_string(msgtxt)
Viper
Сен. 1, 2009 15:36:27
Возможно пустым получается, тогда тело цикла ни разу выполнено не будет.
poltergeist
Сен. 1, 2009 16:13:53
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
igor.kaist
Сен. 1, 2009 16:30:57
poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
Я конечно понимаю, что в цикле нехорошо определять эту переменную, лучше сделать
msq=None
for ...
....
if msg:
....
но почему она должна из памяти удаляться?
Viper
Сен. 1, 2009 17:02:12
poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
Не путай питон с Сишкой :)
>>> for i in xrange(1):
… newvar = ‘abc’
…
>>> newvar
'abc'
poltergeist
Сен. 1, 2009 21:42:19
да блин, чёта я намудрил:)
freeway
Сен. 2, 2009 18:29:17
а как же седлать msg глобальной? или что тут предпринять?
pyuser
Сен. 3, 2009 01:34:34
а сделать цикл for part in msg.walk() подциклом for msgnum, msgsize in .
или я чего-то не понимаю?