Browse Source

serializing as json now fully working

Noah Vogt 3 years ago
parent
commit
be27cb392d
1 changed files with 51 additions and 28 deletions
  1. 51 28
      app/src/main/python/mailFunctions.py

+ 51 - 28
app/src/main/python/mailFunctions.py

@@ -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()