2013-10-22 12 views
11

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

#Read Email Script 
import imaplib 
import email 

mail = imaplib.IMAP4_SSL('imap.gmail.com') 
mail.login('[email protected]', 'passwordgoeshere') 
mail.list() 
mail.select("INBOX") # connect to inbox. 


result, data = mail.search(None, "ALL") 

ids = data[0] 
id_list = ids.split() 
latest_email_id = id_list[-1] 

result, data = mail.fetch(latest_email_id, '(RFC822)') 

raw_email = data[0][1] 

email_message = email.message_from_string(raw_email) 

print (email_message['Subject']) 

अब मूल रूप से यह मेरे इनबॉक्स में दिए गए नवीनतम ईमेल के विषय को आजमाने और पढ़ने के लिए माना जाता है। हालांकि मैं कंसोल में निम्न त्रुटि संदेश मिलता है:

>>> 
Traceback (most recent call last): 
    File "C:/Users/Dhruvin Desai/Documents/Python/script.py", line 21, in <module> 
    email_message = email.message_from_string(raw_email) 
    File "C:\Python33\lib\email\__init__.py", line 40, in message_from_string 
    return Parser(*args, **kws).parsestr(s) 
    File "C:\Python33\lib\email\parser.py", line 69, in parsestr 
    return self.parse(StringIO(text), headersonly=headersonly) 
TypeError: initial_value must be str or None, not bytes 
>>> 

मैं नहीं जानता कि क्यों यह आ रहा है, लेकिन इसके बाद से मुझे बता कि email_message जरूरतों का मूल्य स्ट्रिंग प्रारूप में होना, मैं इस कोशिश की:

email_message = email.message_from_string(str(raw_email)) 

लेकिन हमेशा कि परिवर्तन के साथ पूरी स्क्रिप्ट चल रहा है, कोई बात नहीं क्या के बाद परिणाम, सांत्वना कह None

मैं क्या करना है पता नहीं है, कृपया मदद में हुई।

उत्तर

28

क्योंकि आप python3 उपयोग कर रहे हैं, बजाय

email.message_from_string(raw_email) 

उपयोग

email.message_from_bytes(raw_email) 
+0

का उपयोग कर इस तरह के एक छोटा सा परिवर्तन एक बहुत बड़ा अंतर बना दिया। सहायता के लिए आपका बहुत - बहुत धन्यवाद! – bloodstorm17

+0

@ bloodstorm17 एक बात है जिसे मैं उल्लेख करना भूल गया। जीमेल से प्राप्त सामग्री बेस 64 के साथ एन्कोड किया गया है, आपको वास्तविक विषय प्राप्त करने के लिए इसे डीकोड करने की आवश्यकता है –

संबंधित मुद्दे