Получение вложений Android из почты с помощью imaplib - PullRequest
0 голосов
/ 20 февраля 2012

Я могу читать вложения, отправленные со всех почтовых клиентов, которые я тестировал, кроме почтового приложения по умолчанию для Android.Хотя он работает через приложение gmail в 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?=

Есть идеи?

1 Ответ

0 голосов
/ 21 февраля 2012

Хорошо, я решил проблему. Кажется, мое почтовое приложение по умолчанию для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...