diff options
Diffstat (limited to 'utils/client.py')
-rw-r--r-- | utils/client.py | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/utils/client.py b/utils/client.py index 1dc9205..884a922 100644 --- a/utils/client.py +++ b/utils/client.py @@ -1,63 +1,66 @@ import logging -import poplib +from imapclient import IMAPClient from utils.mail import Email logger = logging.getLogger(__name__) - class EmailClient(object): def __init__(self, email_account, passwd): self.email_account = email_account self.password = passwd - self.server = self.connect(self) + self.server, self.number = self.connect(self) @staticmethod def connect(self): # parse the server's hostname from email account - pop3_server = 'pop.'+self.email_account.split('@')[-1] - server = poplib.POP3_SSL(pop3_server) + imap4_server = "mx1." + self.email_account.split("@")[-1] + server = IMAPClient(host=imap4_server, use_uid=True) # display the welcome info received from server, # indicating the connection is set up properly - logger.info(server.getwelcome().decode('utf8')) + logger.info(server.welcome) # authenticating - server.user(self.email_account) - server.pass_(self.password) - return server + server.login(self.email_account, self.password) + return server, server.select_folder("INBOX")[b"EXISTS"] def get_mails_list(self): - _, mails, _ = self.server.list() - return mails + messages = self.server.search() + dict = self.server.fetch(messages, "RFC822") + return sorted(dict.items(), key=lambda e: e[0]) # Do resorts def get_mails_count(self): - mails = self.get_mails_list() - return len(mails) + return self.number + + def get_mails_unseen_count(self): + unseen_messages = self.server.search("UNSEEN") + return len(unseen_messages) def get_mail_by_index(self, index): - resp_status, mail_lines, mail_octets = self.server.retr(index) - return Email(mail_lines) + list = self.get_mails_list() + msg_data = list[int(index)-1][1] + return Email(msg_data[b"RFC822"]) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): if exc_type is None: - logger.info('exited normally\n') - self.server.quit() + logger.info("exited normally\n") + self.server.shutdown() else: - logger.error('raise an exception! ' + str(exc_type)) - self.server.close() - return False # Propagate + logger.error("raise an exception! " + str(exc_type)) + self.server.logout() + return False # Propagate - -if __name__ == '__main__': +if __name__ == "__main__": useraccount = "XXXXX" password = "XXXXXX" client = EmailClient(useraccount, password) num = client.get_mails_count() print(num) - for i in range(1, num): - print(client.get_mail_by_index(i))
\ No newline at end of file + + for uid, msg_data in client.get_mails_list().items(): + print(client.get_mail_by_index(uid)) |