Check unread count of Gmail messages with Python

匿名 (未验证) 提交于 2019-12-03 01:46:01

问题:

How can I check the number of unread Gmail message in my inbox with a short Python script? Bonus points for retrieving the password from a file.

回答1:

import imaplib obj = imaplib.IMAP4_SSL('imap.gmail.com','993') obj.login('username','password') obj.select() obj.search(None,'UnSeen') 


回答2:

I advise you to use Gmail atom feed

It is as simple as this:

import urllib  url = 'https://mail.google.com/mail/feed/atom/' opener = urllib.FancyURLopener() f = opener.open(url) feed = f.read() 

You can then use the feed parse function in this nice article: Check Gmail the pythonic way



回答3:

Well, I'm going to go ahead and spell out an imaplib solution as Cletus suggested. I don't see why people feel the need to use gmail.py or Atom for this. This kind of thing is what IMAP was designed for. Gmail.py is particularly egregious as it actually parses Gmail's HTML. That may be necessary for some things, but not to get a message count!

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) 

Pre-compiling the regex may improve performance slightly.



回答4:

For a complete implementation of reading the value from the atom feed:

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) 


回答5:

Well it isn't a code snippet but I imagine using imaplib and the Gmail IMAP instructions get you most of the way there.



回答6:

Once you are logged in (do this manually or with gmail.py) you should use the feed.

It is located here: http://mail.google.com/mail/feed/atom

It is the way Google does it. Here is a link to their js chrome extension: http://dev.chromium.org/developers/design-documents/extensions/samples/gmail.zip

You will then be able to parse xml that looks like this:

Gmail - Inbox for yourmail@gmail.comNew messages in your Gmail Inbox142


回答7:

Use 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 

Gets login information from a text file assuming the login name and password are on separate lines.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!