2009-11-22 29 views
13

Bạn có thể xóa email bằng imaplib không? Nếu thế thì sao?Sử dụng python imaplib để "xóa" một email khỏi Gmail?

+2

vào giữa năm 2012, không có câu trả lời nào dưới đây hoạt động trừ khi bạn điều chỉnh cài đặt imap mặc định trước tiên - xem http://stackoverflow.com/questions/3988583/problem-deleting-emails-in-gmail-using-imaplib –

Trả lời

21

Sử dụng phương thức store (trong số)đối tượng đại diện cho kết nối của bạn) để đặt cờ r'\Deleted' trên số thư bạn muốn xóa, làm ví dụ trong tài liệu hiển thị; sau đó phương thức expunge để thực sự thực hiện tất cả các thao tác xóa để đánh dấu.

Triển khai IMAP của Gmail có ngữ nghĩa khác nhau theo mặc định, nhưng nếu bạn muốn bạn có thể tweak hoạt động giống như triển khai IMAP truyền thống (nơi trình tự ở trên hoạt động) - về cơ bản bạn phải bật "Nâng cao Kiểm soát IMAP "lab, sau đó làm theo hướng dẫn tại URL tôi đã cung cấp để có được chính xác ngữ nghĩa IMAP bạn mong muốn (thể chất xóa thay vì lưu trữ" đã xóa "thư, chờ đợi hoặc không cho expunge, v.v.).

16

Xóa email trên IMAP được thực hiện trong hai giai đoạn:

  • dấu một hoặc nhiều mục để xóa: imap.store(msg_no, '+FLAGS', '\\Deleted')
  • xóa bỏ các hộp thư: imap.expunge()

(imap là đối tượng IMAP4 của bạn)

+0

Thao tác này sẽ xóa email của tôi khỏi hộp thư đến của tôi. Nhưng nếu tôi tìm kiếm gmail cho mục vẫn còn đó. Bất kỳ ý tưởng? Sử dụng đặc biệt này với gmail. Bất kỳ sự khác biệt nào tùy thuộc vào phiên bản python hoặc cài đặt gmail? –

+0

Nó sẽ di chuyển email đến nhãn Bin của bạn, được tự động làm sạch mỗi 30 ngày. – hd1

8
imap.uid('STORE', list_of_msgno , '+FLAGS', '(\Deleted)') 
imap.expunge() 

tức là

imap.uid('STORE', '2, 4, 9, 12' , '+FLAGS', '(\Deleted)') 

Đây (2, 4, 9, 12)uid của các thông điệp đó sẽ bị xóa.

+0

là UID giống như những gì chúng tôi nhận được từ imap.search? – user5319825

+0

Nó không hoạt động – user5319825

Các vấn đề liên quan