如何使用简短的 Python 脚本检查收件箱中未读 Gmail 邮件的数量?从文件中检索密码的奖励积分。
7 回答
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login('username','password')
obj.select()
obj.search(None,'UnSeen')
我建议您使用Gmail atom 提要
就这么简单:
import urllib
url = 'https://mail.google.com/mail/feed/atom/'
opener = urllib.FancyURLopener()
f = opener.open(url)
feed = f.read()
然后,您可以在这篇不错的文章中使用提要解析功能:Check Gmail the pythonic way
好吧,我将继续按照 Cletus 的建议详细说明 imaplib 解决方案。我不明白为什么人们觉得有必要为此使用 gmail.py 或 Atom。这种事情就是 IMAP 的设计目的。Gmail.py 特别令人震惊,因为它实际上解析了 Gmail 的 HTML。这对于某些事情可能是必要的,但不是为了获得消息计数!
import imaplib, re
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login(username, password)
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
预编译正则表达式可能会稍微提高性能。
对于从 atom 提要读取值的完整实现:
import urllib2
import base64
from xml.dom.minidom import parse
def gmail_unread_count(user, password):
"""
Takes a Gmail user name and password and returns the unread
messages count as an integer.
"""
# Build the authentication string
b64auth = base64.encodestring("%s:%s" % (user, password))
auth = "Basic " + b64auth
# Build the request
req = urllib2.Request("https://mail.google.com/mail/feed/atom/")
req.add_header("Authorization", auth)
handle = urllib2.urlopen(req)
# Build an XML dom tree of the feed
dom = parse(handle)
handle.close()
# Get the "fullcount" xml object
count_obj = dom.getElementsByTagName("fullcount")[0]
# get its text and convert it to an integer
return int(count_obj.firstChild.wholeText)
好吧,它不是一个代码片段,但我想使用imaplib和Gmail IMAP 指令可以让你大部分时间到达那里。
登录后(手动或使用 gmail.py),您应该使用提要。
它位于此处:http: //mail.google.com/mail/feed/atom
这就是谷歌的做法。这是他们的 js chrome 扩展的链接:http: //dev.chromium.org/developers/design-documents/extensions/samples/gmail.zip
然后,您将能够解析如下所示的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<title>Gmail - Inbox for yourmail@gmail.com</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>142</fullcount>
使用Gmail.py
file = open("filename","r")
usr = file.readline()
pwd = file.readline()
gmail = GmailClient()
gmail.login(usr, pwd)
unreadMail = gmail.get_inbox_conversations(is_unread=True)
print unreadMail
假设登录名和密码在不同的行上,则从文本文件中获取登录信息。