So, I am writing a script to look for all unseen emails of given Gmail, and I am grouping those emails by their sender's address as key and UIDs as value.
But it takes a lot of time to group these emails, it there any way to group it faster, Does CPU plays an important factor here? because I have only 4gb of it.
import imapclient, pyzmail,imaplib,pprint,time
imaplib._MAXLINE = 10000000
imapobj = imapclient.IMAPClient('imap.gmail.com',ssl = True)
imapobj.login('MAIL ID','PASSWORD')
print('Log in Successful...')
imapobj.select_folder('INBOX',readonly=False)
print('INBOX checking...')
uids = imapobj.search(['UNSEEN'])
len_uids = len(uids)
from_dict = {}
print('Grouping....')
time1 = time.time()
iteration = 0
for UID in uids:
iteration += 1
if UID == (len_uids//2):
print('Half done..')
time2 = time.time()
print(round(time2 - time1,1))
rawmessages = imapobj.fetch([UID],['BODY[]','FLAGS'])
message = pyzmail.PyzMessage.factory(rawmessages[UID][b'BODY[]'])
try:
from_dict[message.get_addresses('from')[0][1]].append(UID)
except KeyError:
from_dict.setdefault(message.get_addresses('from')[0][1],[UID])
print(str(UID)+' is grouped.')
print('********Total mails to group is:'+str(len_uids -
iteration)+'********')
pprint.pprint(from_dict)
imapobj.logout()