2010-10-21 11 views
5

का उपयोग कर जीमेल में ईमेल हटाने में समस्या मैं इनबॉक्स फ़ोल्डर से संदेश को हटाने की कोशिश करता हूं और ठीक है, लेकिन जब मैं सभी मेल फ़ोल्डर में स्विच करता हूं तो निकालना काम नहीं करता है। expunge() विधि ('OK', [None]) वापस आती है और संदेश निकाला नहीं गया था:imaplib

>>>import imaplib 
>>>server = imaplib.IMAP4_SSL('imap.gmail.com','993') 
>>>server.login('[email protected]','Password') 
>>>server.select('inbox') 
>>>for i in server.search(None,'all')[1][0].split(): 
... print i+"\n"+server.fetch(i,'(BODY[HEADER.FIELDS (Subject)])')[1][0][1] 
... 
# that how i know what UID hame my message? I select by subject 
#.... 
#28 
#Subject: 1 Question Has 1 Answer - Stack Overflow 
# 
# 
#29 
#Subject: 2222222222 
#... 
>>>server.store(29,'+FLAGS','\\Deleted') 
#('OK', ['29 (FLAGS (\\Seen \\Deleted))']) 
>>>server.expunge() 
#('OK', ['29']) 
>>> server.select('[Gmail]/All Mail') 
('OK', ['47']) 
>>> for i in server.search(None,'all')[1][0].split(): 
... print i+"\n"+server.fetch(i,'(BODY[HEADER.FIELDS (Subject)])')[1][0][1] 
... 
#.... 
# 
#46 
#Subject: 2222222222 
# 
# 
#47 
#Subject: 3333333333333333 
# 
#.... 
>>> server.store(47,'+FLAGS','\\Deleted') 
('OK', ['47 (FLAGS (\\Seen \\Deleted))']) 
>>> server.expunge() 
('OK', [None]) 

उत्तर

7

यह gmail blog site पर कहते हैं, IMAP की Google के क्रियान्वयन पर कुछ भिन्न है। जब आप अधिक सामान्य अर्थशास्त्र प्राप्त करने के निर्देशों का पालन करते हैं, तो क्या इससे मदद मिलती है?

भी आप में से जो लोग करना चाहते हैं जीमेल के IMAP काम अधिक की तरह पारंपरिक IMAP प्रदाताओं बनाने के लिए कुछ और अस्पष्ट विकल्प होते हैं: यदि आप स्वत: -मिटाएँ या कचरा संदेशों बंद कर देते हैं, जब वे नहीं कर रहे हैं कर सकते हैं IMAP के माध्यम से अब दिखाई दे रहा है।

IMAP प्रोटोकॉल की अनुमति देता है को संदेश हटाने के लिए चिह्नित किया, घोषणा राज्य का एक तरह जहां संदेश अभी भी फ़ोल्डर में मौजूद है, लेकिन होने की उम्मीद नष्ट कर दिया अगली बार फ़ोल्डर मिटा दिया जाता। हमारे मानक IMAP कार्यान्वयन में, जब आप हटाए गए संदेश को चिह्नित करते हैं, तो Gmail को उस स्थिति में रुकने नहीं देता है - यह (या ऑटो-एक्सपेंजेस) को तुरंत फ़ोल्डर से हटा देता है। आप दो चरणों हटाने की प्रक्रिया चाहते हैं, के बाद आप सक्रिय कर दिया है इस लैब, बस सेटिंग्स में के तहत 'नहीं अपने आप संदेशों को मिटाना है' 'अग्रेषण और POP/IMAP' टैब चुनें।

इसी तरह, सबसे IMAP प्रणालियों संग्रहण नहीं शेयर जीमेल की अवधारणा संदेश (करने के लिए [जीमेल] संदेश भेजने [जीमेल]/ट्रैश/सभी मेल फ़ोल्डर के बजाय) से करते हैं। यदि आप हटाए गए संदेशों को किसी भी में शेष नहीं दिख रहे हैं तो अन्य दृश्यमान IMAP फ़ोल्डर्स [जीमेल]/ट्रैश के बजाय भेजे जाते हैं, उन्नत IMAP नियंत्रण आपको अपनी प्राथमिकताओं इस तरह सेट करने देता है। 'आईएमएपी एक्सेस:' 'फॉरवर्डिंग और पीओपी/आईएमएपी' टैब के अनुभाग में, ' संदेश पिछले दृश्यमान IMAP फ़ोल्डर:' विकल्प से हटा दिया गया है। 'संदेश को जीमेल ट्रैश में ले जाएं' का चयन करें। यदि आप इसे एक चरण आगे ले जाना चाहते हैं, तो आप 'तुरंत संदेश हमेशा के लिए हटाएं' चुन सकते हैं।

6

Gmail advanced IMAP controls के साथ आप सेट कर सकते हैं जब आप IMAP पर उन्हें हटाते हैं तो संदेशों के साथ क्या होता है।

बस जीमेल लैब्स में "उन्नत IMAP नियंत्रण" सक्षम करें। तब

settings

जब आप एक संदेश के रूप में चिह्नित नष्ट कर दिया और मिटाना this answer प्रति के रूप में यह बिन में ले जाया जाएगा, स्थायी रूप से हटा, या संग्रहीत करने के लिए "सभी मेल" के आधार पर: सेटिंग पृष्ठ इस तरह दिखेगा आपने किस सेटिंग को चुना है।

+1

मैं कोशिश की है: इस दर्जी आप चाहें, लेकिन यह विचार कैसे चयन/खोज का उपयोग करने के लिए और फिर एक दुकान प्रदर्शन, या बस किसी विशिष्ट लेबल/फ़ोल्डर के साथ सभी वस्तुओं के लिए अपने आप ही चयन पर सभी नहीं है के रूप में आपका दृष्टिकोण लेकिन जब मैं एक संदेश हटाता हूं तो संदेश में एक आईएनबॉक्स लेबल होगा जबकि अगर हम स्वयं जीमेल से हटा देंगे तो संदेश में कोई लेबल नहीं होगा। –

+2

मुझे पता है कि यह वास्तव में पुराना धागा है, लेकिन राहुल की समस्या के साथ किसी और की मदद करने के लिए, आपको ट्रैश लेबल जोड़ने से पहले, केवल "इनबॉक्स लेबल" को हटाने की आवश्यकता है। यानी 'imap.store (num,' -X-GM-LABELS ',' \\ इनबॉक्स ') ' – Shogan

12

यह जीमेल ट्रैश

#!usr/bin/python 
import email, imaplib 

user = 'xxx' 
pwd = 'xxx' 

m = imaplib.IMAP4_SSL("imap.gmail.com") 
m.login(user,pwd) 

m.select("some_gmail_label") 
m.store("1:*",'+X-GM-LABELS', '\\Trash') 

m.expunge() # should be useless, but gmail server says it is ok 

अपने Gmail इंटरफ़ेस को ताज़ा करने के कारण यह कैश

+0

ग्रेट सुझाव। M.store() के इस उपयोग पर दस्तावेज़ कहां हैं? – jml

+0

@jml: [IMAP spec, RFC 3501] (https://tools.ietf.org/html/rfc3501) से उद्धरण: '* उपयोग में सबसे बड़ी संख्या का प्रतिनिधित्व करता है' – ckhan

0

यहाँ एक है कि जीमेल के साथ काम करता है याद करने के लिए एक दिया जीमेल लेबल में मौजूद सभी मेल ले जाता है और यह बहुत करता है जल्दी (लूप के लिए दुकान में बिना)।

#!/bin/python 

import datetime 
import imaplib 

m = imaplib.IMAP4_SSL("imap.gmail.com") # server to connect to 
print "Connecting to mailbox..." 
m.login('[email protected]_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." 
संबंधित मुद्दे