我试图在我的电子邮件中阅读我的收件箱文件夹的正文,如果有附件,请下载它。我已经联系到了所收到邮件的正文,但前提是它上面没有任何附件。
现在我已经阅读了所收到邮件的所有正文消息,但我无法在邮件中下载附件。
接下来,您将看到我的代码,如果它可以帮助某人,您就可以自由使用它。
import imaplib
import email
import myEmails
from myEmails import dicCorreos,dicContras
class Attachement(object):
def __init__(self):
self.data = None;
self.content_type = None;
self.size = None;
self.name = None;
def parse_attachment(message_part):
content_disposition = message_part.get("Content-Disposition", None)
if content_disposition:
dispositions = content_disposition.strip().split(";")
if content_disposition and dispositions[0].lower() == "attachment":
attachment = Attachement()
attachment.data = message_part.get_payload(decode=True)
attachment.content_type = message_part.get_content_type()
attachment.size = len(attachment.data)
attachment.name = message_part.get_filename()
return attachment
return None
def get_text(self, email_message_instance):
maintype = email_message_instance.get_content_maintype()
if maintype == 'multipart':
for part in email_message_instance.get_payload():
if part.get_content_maintype() == 'text':
return part.get_payload()
if part.get_content_maintype() == 'multipart':
for part2 in part.get_payload():
return part2.get_payload()
elif maintype == 'text':
return email_message_instance.get_payload()
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(dicCorreos['correo3'],dicContras['contra3'])
mail.list()
mail.select("inbox")
result,data = mail.search(None,"ALL")
# result=OK,data=['1 2 3 4 5 6 7 8 9 10 11 ...']
if result=='OK':
latest_id = data[0].split()[-6:]
list_data=[]
for i in range(len(latest_id)):
list_data.append(email.message_from_string(mail.fetch(latest_id[int(i)],"(RFC822)")[1][0][1]))
print len(list_data)
print range(len(list_data))
for i in range(len(list_data)):
correoDeOrigen=email.utils.parseaddr(list_data[i]['From'])[1]
#if correoDeOrigen!=dicCorreos['correo1']:
#print "No era lo esperado\n",correoDeOrigen,dicCorreos['correo1']
#pass
#and email_message_list[i]['Subject']=='Voy a probar'
print correoDeOrigen
print list_data[i].items()[-1]
mensaje = get_text('',list_data[i])
print 'Titulo: ',list_data[i]['Subject']
if mensaje==None:
print 'mensaje none en posicion i = ',i
print '\n Guardo el archivo adjunto \n'
att=parse_attachment(list_data[i])
print 'Llega aqui?'
if att != None:
print 'entra en el if del archivo'
print "I'm into the if"
file = open(att.name, 'w')
file.write(att.data)
file.close()
print '\n comprobar si se ha guardado \n'
print 'Have I saved the file?'
else:
print 'No, no puedo guardar nada, tengo problemas'
print "No, I can't save nothing, I have a problem here"
else:
print 'Mensaje:\n',mensaje
print '\n-------------------------FIN DE ITERACIÓN Nº', i,'----------------------------------------'
我对其中一些消息的类型有些问题。没有附件的邮件类型是'内容类型'' multipart / alternative;我已成功完成电子邮件的正文。但是,如果带附件的邮件类型是'内容类型',' multipart / mixed;我无法下载附件。现在我的错误消息不起作用,我会找一个新表单来修复它
拜托,有人可以帮我解决这个挑战吗?
我知道电子邮件类型完全有机,但我无法理解。如果有人能帮助我理解它......
由于
这里是执行结果
('Content-Type', 'multipart/alternative; boundary="001a..."')
Titulo: hola
Mensaje:
hola
-------------------------FIN DE ITERACIÓN Nº 0 ----------------------
('Content-Type', 'multipart/alternative;
boundary="f4f5..."')
Titulo: hola
Mensaje:
que tal
-------------------------FIN DE ITERACIÓN Nº 1 ----------------------
('Content-Type', 'multipart/alternative; boundary="001a..."')
Titulo: que tal
Mensaje:
que tal
-------------------------FIN DE ITERACIÓN Nº 2 -----------------------
('Content-Type', 'multipart/alternative; boundary="f403..."')
Titulo: que tal
Mensaje:
hola
-------------------------FIN DE ITERACIÓN Nº 3 -----------------------
('Content-Type', 'multipart/mixed;
boundary="001a..."')
Titulo: Voy a probar
mensaje none en posicion i = 4
Guardo el archivo adjunto
Llega aqui?
No, no puedo guardar nada, tengo problemas
No, I can't save nothing, I have a problem here
----------------FIN DE ITERACIÓN Nº 4 ---------------------------
('Content-Type', 'multipart/alternative;
boundary="001a..."')
Titulo: Voy a probar
Mensaje:
A no enviar
un archivo adjunto
vete a saber si
es por eso que
cambia el content-type
de multipart/alternative
a multipart/mixed
-------------------------FIN DE ITERACIÓN Nº 5 ---------------------