Подсчет количества сообщений в учетной записи электронной почты с помощью python

есть ли способ в Python получить доступ к учетной записи электронной почты (мне это понадобится для gmail, но лучше, если она будет работать) и иметь возможность видеть количество сообщений в папке «Входящие» (возможно, даже только непрочитанные сообщения) ? Спасибо.


person Gabriele Cirulli    schedule 09.06.2010    source источник


Ответы (4)


Альтернативное специальное решение Gmail для поиска непрочитанных сообщений:

Gmail предлагает атомарные фиды для сообщений. Например:

https://mail.google.com/mail/feed/atom/ ( непрочитанные сообщения во входящих) http://mail.google.com/mail/feed/atom/labelname/ (непрочитанные сообщения в labelname) http://mail.google.com/mail/feed/atom/unread/ (все непрочитанные сообщения)

Таким образом, вы можете использовать прекрасную библиотеку feedparser для захвата фида и подсчета записей.

Однако теперь, когда я смотрю на это, кажется, что лента непрочитанных сообщений возвращает только до 20 записей, так что это может быть немного ограничено.

person fitzgeraldsteele    schedule 10.06.2010

Вы можете попробовать это

import imaplib  
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)  
obj.login('username', 'password')  
obj.select('Inbox')      <-- it will return total number of mail in Inbox i.e 
('OK', ['50'])  
obj.search(None,'UnSeen')  <-- it will return the list of uids for Unseen mails  
person Avadhesh    schedule 15.06.2010
comment
эй .. это не выводит никакого результата .. изменились ли библиотеки после этого? - person ScipioAfricanus; 13.04.2018

Взгляните на POP3 и пакеты IMAP.

person ʇsәɹoɈ    schedule 09.06.2010

Основываясь на ответе Авадхеша:

#! /usr/bin/env python3.4

import getpass
import imaplib

mail = imaplib.IMAP4_SSL('imap.server.com')
mypassword = getpass.getpass("Password: ")
address = '[email protected]'
mail.login(address, mypassword)
mail.select("inbox")
print("Checking for new e-mails for ",address,".", sep='')
typ, messageIDs = mail.search(None, "UNSEEN")
messageIDsString = str( messageIDs[0], encoding='utf8' )
listOfSplitStrings = messageIDsString.split(" ")
if len(listOfSplitStrings) == 0:
    print("You have no new e-mails.")
elif len(listOfSplitStrings) == 1:
    print("You have",len(listOfSplitStrings),"new e-mail.")
else:
    print("You have",len(listOfSplitStrings),"new e-mails.")
person Matthew R. Karlsen    schedule 23.05.2014
comment
привет, твой ответ мне очень помог. Я новичок в imaplib и пытаюсь получить 20 последних электронных писем на нашем сервере imap. Можете ли вы помочь мне, как я это сделаю? - person hocuspocus31; 16.08.2016