aboutsummaryrefslogtreecommitdiff
path: root/utils/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/client.py')
-rw-r--r--utils/client.py51
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))