Чем хорош почтовый клиент Mozilla Thunderbird?

Хотя бы тем, что хранит письма в удобном формате mailbox. Благодрая этому можно рулить почтой программно: считывать содержимое ящика, удалять и добавлять письма.

Зачем это может понадобитсья? Например, каждый день вам на почту приходят реестры платежей, которые нужно выгрузить из аттача, распаковать, и, в зависимости от имени файла, скопировать в определенную директорию. Напрашивается автоматизация процесса.

В составе богатой библиотеки Питона есть модуль mailbox. Небольшой пример:

import os
import cgitb
cgitb.enable(display=False, logdir=os.path.dirname(__file__))

import mailbox

MAILBOX_PATH = "path/to/mailbox.file" # Путь к файлу ящика
DATA_PATH = "store/path" # Директория для файлов

mbox = mailbox.mbox(MAILBOX_PATH, create=False)
for i, message in enumerate(mbox):
    attachments = message.get_payload()
    for attachment in attachments:
        filename = attachment.get_filename()
        if filename and filename.endswith(".txt"):
            body = attachment.get_payload(decode=True)
            filepath = os.path.join(DATA_PATH, filename)
            with open(filepath, "w") as f:
                f.write(body)
    mbox.remove(i)
mbox.close()

Основной цикл обходит все письма в ящике. Переменная attachments — это список частей письма. Частью может быть всё — простой текст, HTML-сообщение, файловое вложение и т.д.

get_filename() возвращает имя части. Для файлов оно будет отлично от None. Нас интересуют только текстовые файлы. Тело файла извлекается методом get_payload() части.

При передаче файла он может быть закодирован методами base64 или uuencode. Чтобы получить исходный файл, передается параметр decode=True. Полученный файл пишется на диск.

Сообщение удаляется из ящика. По окончании цикла ящик закрывается.