Найти - Пользователи
Полная версия: Получение писем с вложениями , вложения закодированы UUE
Начало » Network » Получение писем с вложениями , вложения закодированы UUE
1 2
freeway
Всем привет!!! Есть вот такая (описана в заголовке) задача. Я вообще пишу на с++, но там это сложно, как не бился не могу перекодировать, посоветовали на пайтоне.
Вот письма проверяю так:

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
про uue смотри модуль mimetools
freeway
пойдем пошагово, вот пытаюсь стащить атач:

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
Возможно пустым получается, тогда тело цикла ни разу выполнено не будет.
poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
igor.kaist
poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
Я конечно понимаю, что в цикле нехорошо определять эту переменную, лучше сделать
msq=None
for ...
....
if msg:
....
но почему она должна из памяти удаляться?
Viper
poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
Не путай питон с Сишкой :)
>>> for i in xrange(1):
… newvar = ‘abc’

>>> newvar
'abc'
poltergeist
да блин, чёта я намудрил:)
freeway
а как же седлать msg глобальной? или что тут предпринять?
pyuser
а сделать цикл for part in msg.walk() подциклом for msgnum, msgsize in .
или я чего-то не понимаю?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB