IMAP удаление сообщений - PullRequest
13 голосов
/ 05 июля 2010

Как я могу удалить сообщения из почтового ящика? Я использую этот код, но буквы не удаляются. Извините за мой английский.

def getimap(self,server,port,login,password):
    import imaplib, email
    box = imaplib.IMAP4(server,port)
    box.login(login,password)
    box.select()
    box.expunge()
    typ, data = box.search(None, 'ALL')
    for num in data[0].split() :
        typ, data = box.fetch(num, '(UID BODY[TEXT])')
        print num
        print data[0][1]
    box.close()
    box.logout()

Ответы [ 5 ]

17 голосов
/ 24 ноября 2011

Это рабочий код для удаления всех писем из вашего почтового ящика:

import imaplib
box = imaplib.IMAP4_SSL('imap.mail.microsoftonline.com', 993)
box.login("user@domain.com","paswword")
box.select('Inbox')
typ, data = box.search(None, 'ALL')
for num in data[0].split():
   box.store(num, '+FLAGS', '\\Deleted')
box.expunge()
box.close()
box.logout()
15 голосов
/ 05 июля 2010

Я думаю, что вы должны сначала пометить электронные письма, которые будут удалены. Например:

for num in data[0].split():
   box.store(num, '+FLAGS', '\\Deleted')
box.expunge()
6 голосов
/ 22 августа 2013

Следующий код печатает некоторые поля заголовка сообщения, а затем удаляет сообщение.

import imaplib
from email.parser import HeaderParser
m = imaplib.IMAP4_SSL("your_imap_server")
m.login("your_username","your_password")
# get list of mailboxes
list = m.list()
# select which mail box to process
m.select("Inbox") 
resp, data = m.uid('search',None, "ALL") # search and return Uids
uids = data[0].split()    
mailparser = HeaderParser()
for uid in uids:
    resp,data = m.uid('fetch',uid,"(BODY[HEADER])")        
    msg = mailparser.parsestr(data[0][1])       
    print (msg['From'],msg['Date'],msg['Subject'])        
    print m.uid('STORE',uid, '+FLAGS', '(\\Deleted)')
print m.expunge()
m.close() # close the mailbox
m.logout() # logout 
3 голосов
/ 08 июля 2010

Если вы используете GMail , процесс немного отличается:

  1. Переместите его в папку [Gmail] / Корзина.
  2. Удалить его из папки [Gmail] / Корзины (флаг «Добавить \ Удалить»)

Все электронные письма в [Gmail] / Спаме и [Gmail] / Корзине удаляются через 30 дней. Если вы удалите сообщение из [Gmail] / Спама или [Gmail] / Корзины, оно будет удалено навсегда.

Не забудьте также позвонить EXPUNGE после установки тега Удалено.

1 голос
/ 25 февраля 2014

Это то, что работает для меня, и это действительно быстро, поскольку я не удаляю каждое электронное письмо отдельно (сохраняю), а вместо этого передаю индекс списка. Это работает как для личного, так и для корпоративного gmail (Google Apps для бизнеса). Сначала он выбирает папку / метку для использования m.list () покажет вам все доступные. Затем он ищет электронные письма старше года и выполняет переход в корзину. Затем он помечает все электронные письма в корзине с флагом удаления и удаляет все:

#!/bin/python

import datetime
import imaplib

m = imaplib.IMAP4_SSL("imap.gmail.com")  # server to connect to
print "Connecting to mailbox..."
m.login('gmail@your_gmail.com', 'your_password')

print m.select('[Gmail]/All Mail')  # required to perform search, m.list() for all lables, '[Gmail]/Sent Mail'
before_date = (datetime.date.today() - datetime.timedelta(365)).strftime("%d-%b-%Y")  # date string, 04-Jan-2013
typ, data = m.search(None, '(BEFORE {0})'.format(before_date))  # search pointer for msgs before before_date

if data != ['']:  # if not empty list means messages exist
    no_msgs = data[0].split()[-1]  # last msg id in the list
    print "To be removed:\t", no_msgs, "messages found with date before", before_date
    m.store("1:{0}".format(no_msgs), '+X-GM-LABELS', '\\Trash')  # move to trash
    print "Deleted {0} messages. Closing connection & logging out.".format(no_msgs)
else:
    print "Nothing to remove."

#This block empties trash, remove if you want to keep, Gmail auto purges trash after 30 days.
print("Emptying Trash & Expunge...")
m.select('[Gmail]/Trash')  # select all trash
m.store("1:*", '+FLAGS', '\\Deleted')  #Flag all Trash as Deleted
m.expunge()  # not need if auto-expunge enabled

print("Done. Closing connection & logging out.")
m.close()
m.logout()
print "All Done."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...