我使用pythons imaplib連接到我的Gmail賬戶。我想檢索前15個郵件(未讀或未讀,沒關係),只顯示主題和發件人姓名(或地址),但不知道如何顯示收件箱的內容。python imaplib獲取Gmail收件箱主題標題和發件人姓名
這裏是我到目前爲止的代碼(連接成功)
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('[email protected]', 'somecrazypassword')
mail.list()
mail.select('inbox')
#need to add some stuff in here
mail.logout()
我認爲這應該是很簡單的,我只是不熟悉不夠用了imaplib庫的命令。任何幫助,將必須感激...
UPDATE 感謝朱利安我可以通過每個消息循環,並取回全部內容:
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
typ, data = mail.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][1])
mail.close()
,但我想只是主題和發件人。是否有這些項目的imaplib命令,或者我將不得不解析文本的全部內容[0] [1]:主題和發件人?
UPDATE OK,得到了主題和發件人部分工作,但迭代(1,15)由遞減順序進行顯然我展示了最早的消息第一。我該如何改變這一點?我試着這樣做:
for i in range(len(data[0])-15, len(data[0])):
print data
但只是給了我None
所有15次迭代...任何想法?我也試着mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
但Gmail的犯規支持的.sort()函數
UPDATE 想出一個辦法做到這一點:
#....^other code is the same as above except need to import email module
mail.select('inbox')
typ, data = mail.search(None, 'ALL')
ids = data[0]
id_list = ids.split()
#get the most recent email id
latest_email_id = int(id_list[-1])
#iterate through 15 messages in decending order starting with latest_email_id
#the '-1' dictates reverse looping order
for i in range(latest_email_id, latest_email_id-15, -1):
typ, data = mail.fetch(i, '(RFC822)')
for response_part in data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
varSubject = msg['subject']
varFrom = msg['from']
#remove the brackets around the sender email address
varFrom = varFrom.replace('<', '')
varFrom = varFrom.replace('>', '')
#add ellipsis (...) if subject length is greater than 35 characters
if len(varSubject) > 35:
varSubject = varSubject[0:32] + '...'
print '[' + varFrom.split()[-1] + '] ' + varSubject
這給了我最近的15條消息,主題和發件人地址按要求在降序!感謝所有幫助!
從Python文檔的例子正常工作對我來說:http://docs.python.org/library/ imaplib#imap4 - example – Julian
是的,你說得對,這對於檢索所有消息的完整消息內容很安靜。我只想要主題和發件人地址。然後,我可以使for循環只有1到15 – sadmicrowave
另一個鏈接到Python文檔:http://docs.python.org/library/email.html;) – Julian