Как переместить письмо из одной папки в другую?

Рейтинг: 2Ответов: 1Опубликовано: 09.01.2023

Есть код, который логинится в gmail и получает id писем из папки входящие. Создал папку oplata, как я могу письмо, зная его id, переместить в эту папку?

import imaplib
imap = imaplib.IMAP4_SSL(imap_server)
imap.login(user, password)
imap.select('inbox')
mails = imap.search(None, "SINCE 30-Dec-2022")

введите сюда описание изображения

Ответы

▲ 1Принят

Прямых решений я не нашел, поэтому реализовал следующим образом:

Письмо копируется в нужную папку, а после удаляется из исходной. Важный момент, если нужно удалять несколько писем, как это было у меня, то обязательно нужно это делать через uid, т.к, после удаления первого письма обычные айдишники остальных писем сместятся.

import imaplib
import re


def parse_uid(data):
    pattern_uid = re.compile(r'\d+ \(UID (?P<uid>\d+)\)')
    match = pattern_uid.match(data)
    return match.group('uid')


imap = imaplib.IMAP4_SSL(imap_server)
imap.login(user, password)
imap.select('inbox')
mails = imap.search(None, "SINCE 30-Dec-2022")
for mail in mails:
    resp, msg_uid = self.imap.fetch(i, "(UID)")
    msg_uid = self.parse_uid(msg_uid[0].decode('utf-8'))
    imap.uid('COPY', i, 'папка_куда_переместить')
    imap.uid('STORE', i, '+FLAGS', '(\Deleted)')