当前位置: 首页 > 面试题库 >

python imaplib获取gmail收件箱主题标题和发件人名称

朱建弼
2023-03-14
问题内容

我正在使用pythons
imaplib连接到我的Gmail帐户。我想检索前15条消息(未读或已读,没关系),仅显示主题和发件人姓名(或地址),但不知道如何显示收件箱中的内容。

到目前为止,这是我的代码(成功连接)

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库的命令不够熟悉。任何帮助将不胜感激…

更新 感谢朱利安,我可以遍历每条消息并使用以下方法检索全部内容:

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命令,或者我是否必须解析文本data [0] [1]的全部内容:主题和发件人?

UPDATE OK,使主题和发送者部分正常工作,但是迭代(1,15)由desc顺序完成,显然首先显示了最早的消息。我该如何更改?我尝试这样做:

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条消息主题和发件人地址(按要求降序排列)!感谢所有的帮助!


问题答案:
    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])

这应该给您一个关于如何检索主题以及从中检索主题的想法。



 类似资料:
  • AdminLTE 使用所有 Bootstrap 4 组件。这是一个回顾 Bootstrap 文档的良好开端,通过它了解此文档未涵盖的各种组件。 在浏览示例页面时如果你想要复制组件,请右键单击该组件并选择“检查元素”它比从页面中获取 HTML 更快。 主标题包含导航栏。导航栏结构与 Bootstrap 略有不同,因为它有 Bootstrap 不提供的组件。导航栏可以通过两种方式创建。这是常规导航栏的

  • X2.2.0新增 sp_get_current_theme($default_theme='') 功能: 获取当前主题名 参数: $default_theme: 指定的默认主题 返回: 类型string,主题名 使用: $theme = sp_get_current_theme();

  • 我能够通过Gmail API和桌面应用程序成功地阅读我的收件箱内容。但当我试图阅读其他人的gmail收件箱时,我得到了一个例外? 所以我的问题是,Gmail Api会允许应用程序访问收件箱中的其他人,还是只允许使用凭据生成客户机密文件的人??

  • 我是Django新手。我使用django-mailbox包在Django管理员中设置了一个邮箱。URI配置是一个GmailIMAP电子邮件服务器。在将邮件检索到我的Django邮箱时,它们从收件箱中删除并创建为db记录。是否有办法将电子邮件恢复到Gmail收件箱,无论是使用Django API、gSuite的电子邮件恢复,还是将数据从db导出到Gmail收件箱? 提前感谢您的帮助。附言:邮件不存在

  • 我使用以下代码从我的应用程序发送电子邮件: 使用上述代码,我可以将电子邮件发送到收件人的电子邮件地址,但是,主题字段为空,收件人字段也为空,而所有收件人都显示在电子邮件的密件抄送字段中。此外,附件以字节字符串的形式出现,而不是可下载的pdf文件。下面是一个示例: user@gmail.com到密件抄送:user@outlook.com,密件抄送:user@domain.com ------=\u