2013-10-22 17 views
11

私はgmailアカウントにログインしてGUIのすぐ近くにメッセージが何であるかを教えるスクリプトをPythonで作成しようとしています。私はビットプログラムをもっと便利にするために、コードにもう少し詳しいことをするつもりですが、今は私が得ている生の情報を解析できるだけです。ここに私のコードです:Python Email Parsing Issue

#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

私が何をするか分からない、助けてくださいと言って、コンソールになりました。代わりに

email.message_from_string(raw_email) 

を使用しての

答えて

28

あなたがのpython3を使用しているため、使用

email.message_from_bytes(raw_email) 
+0

このような小さな変化が大きな違いを作りました。助けてくれてありがとう! – bloodstorm17

+0

@ bloodstorm17私は言及するのを忘れていました。 Gmailから取得したコンテンツはbase64でエンコードされているため、実際のテーマを取得するにはデコードする必要があります –