以下是目前为止的代码(成功连接):
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('mygmail@gmail.com', 'somecrazypassword')
mail.list()
mail.select('inbox')
#need to add some stuff in here
mail.logout()
我认为这应该很简单,只是我不太熟悉imaplib库的命令。任何帮助都将不胜感激...
更新 因为Julian的帮助,我可以遍历每个消息并使用以下代码检索整个内容:
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()
但我只想要主题和发件人。有没有IMAP库的命令可以获取这些内容,或者我必须解析data[0][1]的全部内容以获取文本:主题和发件人?
更新 好的,我已经实现了获取主题和发件人的部分,但是迭代(1,15)显然按照降序进行,首先显示我最旧的邮件。我该如何更改?我尝试过以下操作:
for i in range( len(data[0])-15, len(data[0]) ):
print data
但在15个迭代中,这只给了我所有的None
,有什么想法吗?我也尝试过mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
,但Gmail不支持.sort()函数。
更新 找到一种方法来解决:
#....^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个邮件主题和发件人地址,按照请求的顺序进行了降序排序!感谢所有帮助我的人!