2011-07-07 22 views
12

既存のコードサンプルをカスタマイズする手助けがありますか?Pythonを使用してGmailから特定のメールをダウンロード

次の記事ではGmailに接続してコンテンツをダウンロードする方法を確認できますが、特定のメールを検索してタイムスタンプと本文のみをダウンロードする方法はわかりません。

記事:How can I download all emails with attachments from Gmail?

私は特に最後の5日間「[email protected]」からのメールを取得し、電子メールの送信時間と身体をダウンロードします。これを解析して、使用する必要がある電子メールを特定します。

私は独学で、これを行うには上のスクリプトをカスタマイズするのに苦労しています。

ご迷惑をおかけして申し訳ありません。ありがとう。

JD

+0

? – sarnold

+1

Gmailに関連するものではありませんが、私はIMAP/POPに賭けていますので、あなたは自殺者でwebclientでそれをやっている以外は検索してください; – tmg

答えて

15

私はIMAPの難解な側面の多くを超えることの論文としてIMAPClientを使用することをお勧め。

次のスニペットは、条件に基づいてメッセージをプルし、メッセージ文字列をemail.message.Messageインスタンスに解析し、DateFromというヘッダーを出力します。 [検索のcriterias](http://www.example-code.com/csharp/imap-search-critera.asp)は、あなたがこれまでに試した持って

from datetime import datetime, timedelta 
import email 
from imapclient import IMAPClient 

HOST = 'imap.gmail.com' 
USERNAME = 'username' 
PASSWORD = 'password' 
ssl = True 

today = datetime.today() 
cutoff = today - timedelta(days=5) 

## Connect, login and select the INBOX 
server = IMAPClient(HOST, use_uid=True, ssl=ssl) 
server.login(USERNAME, PASSWORD) 
select_info = server.select_folder('INBOX') 

## Search for relevant messages 
## see http://tools.ietf.org/html/rfc3501#section-6.4.5 
messages = server.search(
    ['FROM "[email protected]"', 'SINCE %s' % cutoff.strftime('%d-%b-%Y')]) 
response = server.fetch(messages, ['RFC822']) 

for msgid, data in response.iteritems(): 
    msg_string = data['RFC822'] 
    msg = email.message_from_string(msg_string) 
    print 'ID %d: From: %s Date: %s' % (msgid, msg['From'], msg['date']) 
+0

ありがとうRob! UnicodeEncodeError:UnicodeEncodeError:asciiコーデックは文字 'u'\ xa0'を位置3041でエンコードできません:序数が範囲内にありません(128)。UnicodeEncodeError: ' msg_Stringに対して何らかの変換を実行する必要がありますか?私は同じ電子メールで読んでいるので、電子メールのペイロードは問題にはなりません。 – jond

+0

IMAPClientを0.10以上にアップグレードしましたか?そのリリースで行動が変わった。関数がユニコードオブジェクトを返すようになりました(https://bitbucket.org/mjs0/imapclient/src/tip/NEWS.rstを参照)。この場合の特定の問題は、改行されないスペースです。 .replace(u '\ xa0'、u '')で安全に(おそらく)削除することができます –

+0

ありがとうRob !!それがトリックでした。 – jond

2
import imaplib 
from datetime import datetime, timedelta 

obj = imaplib.IMAP4_SSL('imap.gmail.com',993) 
obj.login('username','password') 
obj.select() 

today = datetime.today() 
cutoff = today - timedelta(days=5) 
dt = cutoff.strftime('%d-%b-%Y') 
typ, data = obj.search(None, '(SINCE %s) (FROM "[email protected]")'%(dt,)) 
print data 
関連する問題