Нет вложений при чтении сообщений (невозможно сохранить вложения) - PullRequest
1 голос
/ 03 апреля 2019

Я получаю доступ к учетной записи MS O365 Mail с использованием библиотек python и O365 и не могу получить доступ / сохранить вложения файлов для сообщений

Я сделал это с помощью обычного IMAP и т. Д., Но сейчас, потому что мы должныпользователь oauth2 и все такое - мне нужно получить доступ к почтовому ящику либо через MS-Graph, либо каким-либо другим способом.

Я выбрал библиотеки python-O365, которые позволяют мне делать то, что мне нужно.

Я могу получить папки и сообщения (имена, тела и т. Д.), Но когда я пытаюсь использовать метод message.attachments - я получаю сообщение о том, что количество вложений неизвестно.

Я знаю, что есть два вложения XLSX для этого сообщения, так как я отправил его сам, а также я могу убедиться, что я читаю правильное сообщение, потому что я могу прочитать его тело.

Я искал примеры сохранения вложений (используя библиотеки O365), но они не решают проблему (они перебирают коллекцию вложений - но у меня нет никаких вложений).

Я прочиталчто вложения хранятся отдельно от сообщений и что их нужно извлекать отдельно, но как-то это кажется неправильным?

Приведенный ниже код иллюстрирует проблему ...

for message in inbox.get_messages(5):
    print(message.subject)
    if message.subject == 'test':
        print('here')
        for att in message.attachments:
            print('also here')
            print(att.attachment_name)
            print(att.attachment_type)
            att.save()

Из вышеизложенного я получаютекст «здесь» напечатан - так что я знаю, что используется правильное сообщение.Я не получаю текст «также здесь», который должен получить, поскольку в сообщении есть два файла.

Итак - есть идеи, как мне сохранить мои вложения?

1 Ответ

0 голосов
/ 06 апреля 2019

Это просто показывает, что может принести немного времени, раннего утра и хорошего кофе ...

Я нашел ответ.это было похоронено в трекере проблем для библиотеки O365 на github.

Следующий код работает должным образом:

for message in inbox.get_messages(limit=10, download_attachments=True):
    if message.subject == 'test with file':
        print('here')
        if message.has_attachments:
            print('also here')
            print(message.attachments)
            for att in message.attachments:
                print(att)
                att.save()

Сравните это с исходным кодом, и вы увидите, что мне нужно указать get_messages для download_attachments = True, а также механизм доступа квложения изменились.

В любом случае - теперь это работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...