2016-12-30 4 views
1

Ниже приведено мое понимание того, как можно удалить сообщение электронной почты с помощью imaplib. Он включает перемещение электронной почты в «корзину» перед удалением, которое, я считаю, является требованием при использовании gmail.Удаление электронной почты с помощью imaplib (gmail)

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

>>> import imaplib 
>>> server = imaplib.IMAP4_SSL(GMAIL_IMAP) 
>>> server.login(EMAIL, PASSWORD) 
('OK', [b'[email protected] authenticated (Success)']) 
>>> server.select("INBOX") 
('OK', [b'17']) 
>>> status, uids = server.uid("search", None, "ALL") 
>>> uids 
[b'1 2 3 4 5 6 7 8 9 10 15 16 17 18 19 43 44'] 
uids = [uid for uid in uids[0].split()] 
>>> uids 
[b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9', b'10', b'15', b'16', b'17', b'18', b'19', b'43', b'44'] 
>>> server.store(uids[-1], "X-GM-LABELS", "\\Trash") 
('OK', [None]) 
>>> server.store(uids[-1], "+FLAGS", "\\Deleted") 
('OK', [None]) 
>>> server.expunge() 
('OK', [None]) 
>>> server.close() 
('OK', [b'Returned to authenticated state. (Success)']) 
>>> server.logout() 
('BYE', [b'LOGOUT Requested']) 

ответ

1

Вы смешиваете UID и порядковые номера.

Вы запрашиваете ПОИСК UID, поэтому возвращайте идентификаторы UID. Вам также необходимо использовать UID STORE:

server.uid("store", uids[-1], "X-GM-LABELS", "\\Trash") 

И так далее для других команд магазина. Только в Gmail, когда вы перемещаете его в корзину, вам не нужно беспокоиться о командах \ Deleted и Expunge. Сервер должен сделать это автоматически для вас.

Смежные вопросы