|
@@ -1,4 +1,4 @@
|
|
|
-import imaplib, smtplib, ssl, email, os
|
|
|
+import imaplib, smtplib, ssl, email, os, json
|
|
|
from itertools import chain
|
|
|
|
|
|
# format raw string you get from fetching mails
|
|
@@ -14,7 +14,20 @@ def stringCompiling(inputIterable):
|
|
|
try:
|
|
|
for item in unitered:
|
|
|
if item is not None:
|
|
|
- nonNoneList.append(item)
|
|
|
+ if type(item) is not str:
|
|
|
+ try:
|
|
|
+ nonNoneList.append(str(item.decode("utf-8")))
|
|
|
+ except UnicodeDecodeError:
|
|
|
+ nonNoneList.append(str(item.decode("iso-8859-1")))
|
|
|
+ except AttributeError:
|
|
|
+ print(item)
|
|
|
+ print(type(item))
|
|
|
+ print(inputIterable)
|
|
|
+ print(nonNoneList)
|
|
|
+ exit()
|
|
|
+ else:
|
|
|
+ nonNoneList.append(item)
|
|
|
+
|
|
|
except TypeError:
|
|
|
return ""
|
|
|
|
|
@@ -66,7 +79,25 @@ def listMailboxes(connection):
|
|
|
connection.logout()
|
|
|
return formatted_mailbox_list
|
|
|
|
|
|
-def fetchMails(connection, inbox, outputType):
|
|
|
+
|
|
|
+ # check that there are no bytes anymore that cannot be dumped into a json
|
|
|
+def verifyNoBytes(messages, output_list):
|
|
|
+ for messages in output_list:
|
|
|
+ for item in messages:
|
|
|
+ print(type(item))
|
|
|
+ print(item)
|
|
|
+ print(messages["{}".format(item)])
|
|
|
+ if type(messages["{}".format(item)]) is not str:
|
|
|
+ print("ERROREXIT: .format failed")
|
|
|
+ print(messages["{}".format(item)])
|
|
|
+ print(type(messages["{}".format(item)]))
|
|
|
+
|
|
|
+ exit()
|
|
|
+ if type(item) is not str:
|
|
|
+ print("ERROREXIT")
|
|
|
+ exit()
|
|
|
+
|
|
|
+def fetchMails(connection, inbox):
|
|
|
print("###" + inbox + "###")
|
|
|
print(type(inbox))
|
|
|
try:
|
|
@@ -85,10 +116,7 @@ def fetchMails(connection, inbox, outputType):
|
|
|
typ, data = connection.search(None, 'ALL')
|
|
|
output_list = []
|
|
|
for num in data[0].split():
|
|
|
- if outputType == "dict":
|
|
|
- output_dict = {}
|
|
|
- else:
|
|
|
- inner_output_list = []
|
|
|
+ output_dict = {}
|
|
|
typ, data = connection.fetch(num, '(RFC822)')
|
|
|
msg = email.message_from_bytes(data[0][1])
|
|
|
|
|
@@ -126,38 +154,33 @@ def fetchMails(connection, inbox, outputType):
|
|
|
if raw_string[1] == 'utf-8':
|
|
|
subject = raw_string[0].raw_string('utf-8')
|
|
|
else:
|
|
|
- subject = raw_string[0]
|
|
|
+ subject = raw_string[0].decode("iso-8859-1")
|
|
|
+ #nonNoneList.append(str(item.decode("iso-8859-1")))
|
|
|
except AttributeError:
|
|
|
subject=""
|
|
|
|
|
|
#print("subject: {}".format(subject))
|
|
|
|
|
|
- if outputType == "dict":
|
|
|
- output_dict['subject'] = subject
|
|
|
- output_dict['from'] = stringCompiling(raw_from)
|
|
|
- output_dict['cc'] = stringCompiling(raw_cc)
|
|
|
- output_dict['bcc'] = stringCompiling(raw_bcc)
|
|
|
- output_dict['to'] = stringCompiling(raw_to)
|
|
|
- output_dict['date'] = stringCompiling(raw_date)
|
|
|
- output_dict['content'] = primitive_body
|
|
|
-
|
|
|
- output_list.append(output_dict)
|
|
|
- else:
|
|
|
- inner_output_list.append(subject)
|
|
|
- inner_output_list.append(stringCompiling(subject))
|
|
|
- inner_output_list.append(stringCompiling(raw_cc))
|
|
|
- inner_output_list.append(stringCompiling(raw_bcc))
|
|
|
- inner_output_list.append(stringCompiling(raw_to))
|
|
|
- inner_output_list.append(stringCompiling(raw_date))
|
|
|
- inner_output_list.append(primitive_body)
|
|
|
+ output_dict['subject'] = subject
|
|
|
+ output_dict['from'] = stringCompiling(raw_from)
|
|
|
+ output_dict['cc'] = stringCompiling(raw_cc)
|
|
|
+ output_dict['bcc'] = stringCompiling(raw_bcc)
|
|
|
+ output_dict['to'] = stringCompiling(raw_to)
|
|
|
+ output_dict['date'] = stringCompiling(raw_date)
|
|
|
+ output_dict['content'] = primitive_body
|
|
|
|
|
|
- output_list.append(inner_output_dict)
|
|
|
+ output_list.append(output_dict)
|
|
|
|
|
|
|
|
|
connection.close()
|
|
|
connection.logout()
|
|
|
|
|
|
- return output_list
|
|
|
+ verifyNoBytes(messages, output_list)
|
|
|
+
|
|
|
+ print("Finstep")
|
|
|
+
|
|
|
+ return json.dumps(output_list)
|
|
|
+
|
|
|
|
|
|
def sendStarttls(host, sendingMail, receivingMail, password, message="", subject="", port=587, cc=[], bcc=[]):
|
|
|
context = ssl.create_default_context()
|