123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import imaplib, email, os
- def errorMsgExit(error_msg):
- print("Error: " + error_msg)
- def checkConnection(host, username, password, port):
- try:
- connection = imaplib.IMAP4_SSL(host, port)
- connection.login(username, password)
- connection.logout()
- return True
- except Exception as e:
- print(str(e))
- return False
- def connect(host, username, password, port):
- connect = imaplib.IMAP4_SSL(host, port)
- connect.login(username, password)
- connect.enable("UTF8=ACCEPT")
- return connect
- def listMailboxes(connection):
- mailboxes = connection.list()
- formatted_mailbox_list = []
- for items in mailboxes:
- if type(items) == list:
- for raw_box_string in items:
- box_string = str(raw_box_string)
- # TODO: handle cases when folder contains subfolders
- modified_box_string = (box_string[box_string.find('"/" ')+4:-1])
- # strip unneeded "'s surrounding the folder name
- if modified_box_string.startswith('"') and modified_box_string.endswith('"'):
- modified_box_string = modified_box_string[1:-1]
- formatted_mailbox_list.append(modified_box_string)
- connection.logout()
- return formatted_mailbox_list
- def fetchMails(connection, inbox):
- status, messages = connection.select(inbox)
- print("status-------\n" + status)
- print("messages-------\n" + str(messages))
- # number of top emails to fetch
- N = 3
- # total number of emails
- messages_int = int(messages[0])
- print("message_int------\n" + str(messages_int))
- typ, data = connection.search(None, 'ALL')
- output_list = []
- for num in data[0].split():
- typ, data = connection.fetch(num, '(RFC822)')
- msg = email.message_from_bytes(data[0][1])
- #print(type(msg))
- #print(msg)
- raw_subject = email.header.decode_header(msg['Subject'])[0]
- #raw_body = email.header.decode_header(msg['Body'])[0][0]
- '''
- if decode[1] == 'utf-8':
- subject = decode[0].decode('utf-8')
- else:
- subject = decode[0]
- '''
- #print("subject: {}".format(subject))
- #input()
- #print('Message %s\n%s\n' % (num, data[0][1]))
- #print('Message %s\n%s\n' % (num, data[0][1].split()))
- #print('%s\n' % (len(data[0][1].split())))
- '''
- j = 0
- for i in range(len(str(msg))):
- if str(msg)[i] == "\n":
- print(str(msg)[j:i])
- j = int(i)
- '''
- output_list.append(str(raw_subject))
- connection.close()
- connection.logout()
- return output_list
- def afetchMails(con):
- con.select("Sent")
- status, email_ids = con.search(None, "ALL")
- if status != 'OK':
- raise Exception("Error running imap search for spinvox messages: "
- "%s" % status)
- print(email_ids[0])
- fetch_ids = ','.join(str(email_ids[0]).split())
- status, data = con.fetch(3, '(RFC822)')
- if status != 'OK':
- raise Exception("Error running imap fetch for spinvox message: "
- "%s" % status)
- for i in range(3,4):
- header_msg = email.message_from_string(data[i * 3 + 0][1])
- subject = header_msg['Subject'],
- print(subject)
- date = header_msg['Date'],
- print(date)
- body = data[i * 3 + 1][1]
- print(body)
- connection.close()
- connection.logout()
|