问题描述
我正在使用 pythons imaplib 连接到我的 gmail 帐户.我想检索前 15 条消息(未读或已读,没关系),只显示主题和发件人姓名(或地址),但不知道如何显示收件箱的内容.
I'm using pythons imaplib to connect to my gmail account. I want to retrieve the top 15 messages (unread or read, it doesn't matter) and display just the subjects and sender name (or address) but don't know how to display the contents of the inbox.
这是我目前的代码(连接成功)
Here is my code so far (successful connection)
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 库的命令不够熟悉.任何帮助将不胜感激...
I believe this should be simple enough, I'm just not familiar enough with the commands for the imaplib library. Any help would be must appreciated...
更新感谢 Julian,我可以遍历每条消息并检索全部内容:
UPDATE thanks to Julian I can iterate through each message and retrieve the entire contents with:
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
typ, data = mail.fetch(num, '(RFC822)')
print 'Message %s
%s
' % (num, data[0][1])
mail.close()
但我只想要主题和发件人.这些项目是否有 imaplib 命令,或者我是否必须解析 data[0][1] 的全部内容以获取文本:主题和发件人?
but I'm wanting just the subject and the sender. Is there a imaplib command for these items or will I have to parse the entire contents of data[0][1] for the text: Subject, and Sender?
更新好的,让主题和发件人部分工作,但迭代 (1, 15) 是按 desc 顺序完成的,显然首先向我显示最旧的消息.我怎样才能改变这个?我试过这样做:
UPDATE OK, got the subject and sender part working but the iteration (1, 15) is done by desc order apparently showing me the oldest messages first. How can I change this? I tried doing this:
for i in range( len(data[0])-15, len(data[0]) ):
print data
但这只是给了我所有 15 次迭代的 None
......有什么想法吗?我也试过 mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
但 gmail 不支持 .sort() 函数
but that just gives me None
for all 15 iterations... any ideas? I've also tried mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
but gmail doesnt support the .sort() function
更新想出了一个办法:
#....^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 条消息主题和发件人地址,按要求按降序排列!感谢所有帮助过的人!
this gives me the most recent 15 message subject and sender address in decending order as requested! Thanks to all who helped!
推荐答案
c.select('INBOX', readonly=True)
for i in range(1, 30):
typ, msg_data = c.fetch(str(i), '(RFC822)')
for response_part in msg_data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
for header in [ 'subject', 'to', 'from' ]:
print '%-8s: %s' % (header.upper(), msg[header])
这应该让您了解如何检索主题以及从何处检索主题?
This should give you an idea on how to retrieve the subject and from?
这篇关于python imaplib 获取 gmail 收件箱主题标题和发件人姓名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!