Переместить электронное письмо в GMail с помощью Python и imaplib

Я хочу иметь возможность перемещать электронную почту в GMail из папки «Входящие» в другую папку, используя Python. Я использую imaplib и не могу понять, как это сделать.

25
задан Manoj Govindan 21 August 2010 в 03:06
поделиться

1 ответ

Есть нет явной команды перемещения для IMAP. Вам нужно будет выполнить COPY , затем STORE (с соответствующим флагом для указания удаления) и, наконец, exunge . Приведенный ниже пример работал для перемещения сообщений с одного ярлыка на другой. Вы, вероятно, захотите добавить дополнительную проверку ошибок.

import imaplib, getpass, re
pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)')

def connect(email):
    imap = imaplib.IMAP4_SSL("imap.gmail.com")
    password = getpass.getpass("Enter your password: ")
    imap.login(email, password)
    return imap

def disconnect(imap):
    imap.logout()

def parse_uid(data):
    match = pattern_uid.match(data)
    return match.group('uid')

if __name__ == '__main__':
    imap = connect('<your mail id>')
    imap.select(mailbox = '<source folder>', readonly = False)
    resp, items = imap.search(None, 'All')
    email_ids  = items[0].split()
    latest_email_id = email_ids[-1] # Assuming that you are moving the latest email.

    resp, data = imap.fetch(latest_email_id, "(UID)")
    msg_uid = parse_uid(data[0])

    result = imap.uid('COPY', msg_uid, '<destination folder>')

    if result[0] == 'OK':
        mov, data = imap.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
        imap.expunge()

    disconnect(imap)
39
ответ дан 28 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: