Проверьте непрочитанное количество сообщений Gmail с помощью Python - PullRequest
34 голосов
/ 05 июня 2009

Как я могу проверить количество непрочитанных сообщений Gmail в моем почтовом ящике с помощью короткого скрипта Python? Бонусные баллы за восстановление пароля из файла.

Ответы [ 7 ]

54 голосов
/ 21 октября 2010
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login('username','password')
obj.select()
obj.search(None,'UnSeen')
25 голосов
/ 05 июня 2009

Советую использовать Gmail Atom Feed

Это так просто:

import urllib

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

Затем вы можете использовать функцию разбора канала в этой замечательной статье: Проверьте Gmail по-питонски

24 голосов
/ 05 июня 2009

Что ж, я собираюсь изложить решение для imaplib, как предложил Клетус. Я не понимаю, почему люди чувствуют необходимость использовать gmail.py или Atom для этого. Это то, для чего был разработан IMAP. Gmail.py является особенно вопиющим, поскольку фактически анализирует HTML-код Gmail. Это может быть необходимо для некоторых вещей, но не для подсчета сообщений!

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)

Предварительная компиляция регулярного выражения может немного улучшить производительность.

7 голосов
/ 14 октября 2011

Для полной реализации чтения значения из канала 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)
6 голосов
/ 05 июня 2009

Ну, это не фрагмент кода, но я представляю, что с помощью imaplib и Gmail IMAP с инструкциями вы получите большую часть пути туда.

1 голос
/ 05 июня 2009

После того, как вы вошли в систему (выполните это вручную или с помощью gmail.py), вы должны использовать канал.

Он находится здесь: http://mail.google.com/mail/feed/atom

Это то, как Google это делает. Вот ссылка на расширение 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>
0 голосов
/ 05 июня 2009

Использовать 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

Получает информацию для входа в систему из текстового файла, предполагая, что имя пользователя и пароль находятся в отдельных строках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...