使用imaplib从邮件获取android附件
问题描述:
我可以阅读从我测试过的所有电子邮件客户端发送的附件,但Android的默认电子邮件应用除外。它虽然可以通过android中的gmail应用程序工作。使用imaplib从邮件获取android附件
下面是一些代码:
import email as emaillib
result, data = imap_conn.uid('fetch', email_id, '(RFC822)')
raw_email = data[0][1]
get_attachments(emaillib.message_from_string(raw_email))
def get_attachments(email_message_instance):
attachments = []
for part in email_message_instance.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
data = part.get_payload(decode=True)
if not data:
continue
filename = part.get_filename()
print 'appending attachment with filename: ', filename
attachments.append((filename, data))
return attachments
当我在android系统从默认的电子邮件应用程序发送一个附件它打印:
appending attachment with filename: None
appending attachment with filename: None
appending attachment with filename: =?utf-8?B?SU1BRzAxOTMuanBn?=
任何想法?
答
好吧我解决了这个问题,看来我的android默认邮件应用程序为所有内容处置写入内容。
而且文件名也是非常邪恶的。
所以,我解决了这个问题(因为我只对媒体附件有兴趣):
from email.header import decode_header
def get_attachments(email_message_instance):
attachments = []
for part in email_message_instance.walk():
if part.get_content_maintype() not in ['image', 'video', 'audio']:
continue
if part.get('Content-Disposition') is None:
continue
data = part.get_payload(decode=True)
if not data:
continue
filename = part.get_filename()
filename = u' '.join(w.decode(e or 'ascii') for w,e in decode_header(filename))
attachments.append((filename, data))
return attachments