python - मैं अपना ईमेल केवल एक बार प्रति ईमेल दिखाने के लिए कैसे कर सकता हूं?




email while-loop (2)

तो आप मूल रूप से एक ईमेल श्रोता विकसित करना चाहते हैं ... निम्नलिखित कोड में, मैं सिर्फ अनदेखी ईमेल डाउनलोड करूंगा, ताकि हमारे पास केवल प्रासंगिक डेटा हो। फिर, एक बार ईमेल प्राप्त हो जाने पर, मैं इसे 'पढें' के रूप में चिह्नित करता हूं, इसलिए यह आईडी फिर से चालू नहीं होगी:

while 1:
        r, search_data = mail.search(None, "UNSEEN") #gets only the unseen emails
        ids = data[0]
        id_list = ids.split()
        latest_email_id = id_list[-1]
        r, data = mail.fetch(latest_email_id, "(RFC822)")
        raw_email = data[0][1]
        print raw_email
        mail.store(search_data[0].replace(' ',','),'+FLAGS','\Seen') #marks as read

अब, कम से कम आपका कोड उसी ईमेल को बार-बार प्रिंट नहीं करेगा आम तौर पर नए ईमेल प्राप्त करने में POP3 तुलना में POP3 अधिक विश्वसनीय है फिर भी, इसमें कुछ समय लग सकता है

मैं एक पायथन स्क्रिप्ट बना रहा हूं जो लॉगिंग से ईमेल के लिए जांच करता है। यहाँ मेरा कोड अभी तक है:

#!/usr/bin/python
import imaplib, getpass

mail = imaplib.IMAP4_SSL('imap.gmail.com')
u = raw_input('Your Gmail Address: ')
p = getpass.getpass()
mail.login(u, p)
mail.select("inbox")

while 1:
        r, data = mail.search(None, "ALL")
        ids = data[0]
        id_list = ids.split()
        latest_email_id = id_list[-1]
        r, data = mail.fetch(latest_email_id, "(RFC822)")
        raw_email = data[0][1]
        print raw_email

समस्या ये है कि यह लूप के कारण एक ही ईमेल को बार-बार दिखाता रहता है (जब तक कि कोई नया प्राप्त नहीं हो)।

मैं इसे कैसे बना सकता हूं:

  1. एक नया प्राप्त होने तक केवल एक प्राप्त ईमेल दिखाएं
  2. केवल एक बार एक बार नया दिखाएं
  3. हमेशा के लिए दोहराएं

मुझे एक समाधान मिला है:

list = []

while 1:
        mail.select('inbox')
        r, data = mail.search(None, "ALL")
        ids = data[0]
        id_list = ids.split()
        latest_email_id = id_list[-1]
        r, data = mail.fetch(latest_email_id, "(RFC822)")
        raw_email = data[0][1]
        if not raw_email in list:
                print raw_email
                list.append(raw_email)

असल में, यह सूची नामक एक सूची बनाता है:

list = []

और फिर, लूप में यह ज्यादातर समान है, शुरुआत के सिवाय, यह मेलबॉक्स को फिर से जांचता है:

while 1:
    mail.select('inbox')

और फिर, अंत में, यह raw_email print raw_email अगर यह list में not है और फिर list में जोड़ता है तो यह फिर से print नहीं होगा:

if not raw_email in list:
                print raw_email
                list.append(raw_email)




python-2.x