Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Получение писем с вложениями , вложения закодированы UUE [RSS Feed]

#1 Сен. 1, 2009 13:43:19

freeway
От:
Зарегистрирован: 2009-09-01
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

Всем привет!!! Есть вот такая (описана в заголовке) задача. Я вообще пишу на с++, но там это сложно, как не бился не могу перекодировать, посоветовали на пайтоне.
Вот письма проверяю так:

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

Подскажите пж



Отредактировано (Сен. 1, 2009 13:45:34)

Офлайн

#2 Сен. 1, 2009 13:57:07

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

про uue смотри модуль mimetools



Офлайн

#3 Сен. 1, 2009 15:04:48

freeway
От:
Зарегистрирован: 2009-09-01
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

пойдем пошагово, вот пытаюсь стащить атач:

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)



Отредактировано (Сен. 1, 2009 15:06:21)

Офлайн

#4 Сен. 1, 2009 15:36:27

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

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



Офлайн

#5 Сен. 1, 2009 16:13:53

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.



Офлайн

#6 Сен. 1, 2009 16:30:57

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
Я конечно понимаю, что в цикле нехорошо определять эту переменную, лучше сделать
msq=None
for ...
....
if msg:
....
но почему она должна из памяти удаляться?



Офлайн

#7 Сен. 1, 2009 17:02:12

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

poltergeist
После выхода из цикла "for msgnum, msgsize in :" переменная msg выходит из контекста и удаляется из памяти, поэтому после цикла она не видна.
Не путай питон с Сишкой :)
>>> for i in xrange(1):
… newvar = ‘abc’

>>> newvar
'abc'



Офлайн

#8 Сен. 1, 2009 21:42:19

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

да блин, чёта я намудрил:)



Офлайн

#9 Сен. 2, 2009 18:29:17

freeway
От:
Зарегистрирован: 2009-09-01
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

а как же седлать msg глобальной? или что тут предпринять?



Офлайн

#10 Сен. 3, 2009 01:34:34

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Получение писем с вложениями , вложения закодированы UUE

а сделать цикл for part in msg.walk() подциклом for msgnum, msgsize in .
или я чего-то не понимаю?



Офлайн

  • Начало
  • » Network
  • » Получение писем с вложениями , вложения закодированы UUE[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version