Форум сайта python.su
Нужна помощь в исправлении ошибки
исходный код
import poplib, email, email.header
class pop3_email:
def __init__(self, _server, _username, _password):
self.server=_server
self.username=_username
self.password=_password
self.p = poplib.POP3(self.server)
self.p.getwelcome()
self.p.user(self.username)
self.p.pass_(self.password)
def getmessages(self):
response, lst, octets = self.p.list()
print response
for msgnum, msgsize in [i.split() for i in lst]:print "Сообщение %(msgnum)s имеет длину %(msgsize)s" % vars()
print "UIDL =", self.p.uidl(int(msgnum)).split()[2]
for i in range(1, int(msgnum)+1):
if int(msgsize) > 32000:(resp, message, octets) = self.p.top(i, 0)
else:(resp, message, octets) = self.p.retr(i)
msgtxt = "\n".join(message)+"\n\n"
msg = email.message_from_string(msgtxt)
for i in email.header.decode_header("* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n" % msg):
enc = i[1]
if enc:
print i[0].decode(enc)
else:
print i[0]
print getbodyfromemail(msg)
print self.p.quit()
def getcharsets(msg):
charsets = set({})
for c in msg.get_charsets():
if c is not None:
charsets.update([c])
return charsets
def handleerror(errmsg, emailmsg,cs):
print()
print(errmsg)
print("This error occurred while decoding with ",cs," charset.")
print("These charsets were found in the one email.",getcharsets(emailmsg))
print("This is the subject:",emailmsg['subject'])
print("This is the sender:",emailmsg['From'])
def getbodyfromemail(msg):
body = None
if msg.is_multipart():
for part in msg.walk():
if part.is_multipart():
for subpart in part.walk():
if subpart.get_content_type() == 'text/plain':
body = subpart.get_payload(decode=True)
elif part.get_content_type() == 'text/plain':
body = part.get_payload(decode=True)
elif msg.get_content_type() == 'text/plain':
body = msg.get_payload(decode=True)
for charset in getcharsets(msg):
try:
body = body.decode(charset)
except UnicodeDecodeError:
handleerror("UnicodeDecodeError: encountered.",msg,charset)
except AttributeError:
handleerror("AttributeError: encountered",msg,charset)
return body
Офлайн
getbodyfromemail => self.getbodyfromemail
Офлайн
я правильно понимаю, что надо сделать так
def __init__(self, _server, _username, _password):
self.server=_server
self.username=_username
self.password=_password
self.p = poplib.POP3(self.server)
self.p.getwelcome()
self.p.user(self.username)
self.p.pass_(self.password)
self.getbodyfromemail
...
self.getbodyfromemail(msg)
...
Офлайн
getbodyfromemail это метод класса. По этому к нему надо обращаться через self.
print getbodyfromemail(msg) # Сейчас
print self.getbodyfromemail(msg) # Надо
Офлайн
def getbodyfromemail(self,msg):
не теряйте self
Офлайн
И это относится (sp3 писал выше) не только для getbodyfromemail, но и для других функций getcharsets, handleerror
Офлайн