简体   繁体   中英

IMAP4LIB When using the store command I get the error “BAD [b'Could not parse command']”

I am new to all of this so I'm sorry if I mess this up or have already made a mess. I have two classes a GUI and my MailSorter class in the GUI class I have method which logins, then one that fetches all the EmailIds then finally fetches all the From emails and stores it in a dict. which stores the From email and amount of times it appears and an array with the From email and the ID.

    def fetchFrom(self,emailIDs):
        EmailAmount = dict()
        Email = []
        count = 0
        for emailId in emailIDs:
            #Converts email into string
            result2,email_data = self.mail.fetch(emailId,'(RFC822)')
            try:
                raw_email = email_data[0][1].decode("utf-8")
                email_message = email.message_from_string(raw_email)
                #Fetches email address sent from
                From = email_message["From"]
                Email.append((From,emailId))
                #print(From)
                if From in EmailAmount:
                    EmailAmount[From] = EmailAmount[From] + 1
                else:
                    EmailAmount[From] = 1
                count += 1
                if count > 10:
                    break
            except Exception as e:
                self.log.append((emailId,e))
    def mainScreenInterface(self):
        #Process
        print("Loading program")
        EmailIds = self.Mail.fetchEmailId()
        EmailDict, self.EmailArray = self.Mail.fetchFrom(EmailIds)

        self.master.geometry("750x600")
        self.master.title("Main Screen")
        self.destoryWidget()

        #New Frame
        self.mainScreen = tk.Frame(self.master)
        self.mainScreen.pack()

        #Labels
        mainText = tk.Label(self.mainScreen,text = "All Emails")
        mainText.config(font=("Courier","25"))

        #Buttons
        delete = tk.Button(self.mainScreen,text="Delete", command = self.Delete)
        deleteAll = tk.Button(self.mainScreen,text="Delete All", command = self.DeleteAll) 
        Help = tk.Button(self.mainScreen,text="Help", command = self.Help_)

        #Scrollbar
        scrollbar = tk.Scrollbar(root)
        scrollbar.pack(side="right",fill="y")

        #Listbox
        self.listbox = tk.Listbox(root,width = root.winfo_screenwidth(), height = 25)
        #Attach a scrool wheel to the listbox
        self.listbox.config(yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.listbox.yview)

        #Add items to the list box
        count = 1
        for x,y in EmailDict.items():
            self.listbox.insert(count,(x,y))
            count += 1

        #Placement
        paddingValue = 40
        mainText.pack(side="top")
        self.listbox.pack(side="top")
        delete.pack(side="left",padx=paddingValue)
        deleteAll.pack(side="left",padx=paddingValue)
        Help.pack(side="left",padx=paddingValue)
    def Delete(self):
        emailName = self.listbox.get(tk.ANCHOR)[0]
        self.Mail.deleteEmail(emailName,self.EmailArray)

So the fetchFrom is from the mailSorter class and the other two are the GUI class, when I call the deleteEmail I get the error:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\******\Desktop\Email Sorter v3.py", line 197, in Delete
    self.Mail.deleteEmail(emailName,self.EmailArray)
  File "C:\Users\******\Desktop\Email Sorter v3.py", line 66, in deleteEmail
    self.mail.store(Id[1].strip(), '+X-GM-tk.LabelS', '\\Trash')
  File "C:\Python\lib\imaplib.py", line 840, in store
    typ, dat = self._simple_command('STORE', message_set, command, flags)
  File "C:\Python\lib\imaplib.py", line 1196, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "C:\Python\lib\imaplib.py", line 1027, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.IMAP4.error: STORE command error: BAD [b'Could not parse command']

but when I run it as a text base with no GUI and use an example email it all works fine:

    test = MailSorter("hamadnassor5@gmail.com","snerfulbubble1.")
    test.login()
    EmailIds = test.fetchEmailId()
    EmailDict, EmailArray = test.fetchFrom(EmailIds)
    test.displayEmails(EmailDict)
    test.deleteEmail("Xbox <Xbox@outlook.com>",EmailArray)
    test.closeCon()

DeleteMail code

    def deleteEmail(self, emailName, EmailArray):
        for Id in EmailArray:
            if Id[0] == emailName:
                print(Id[0])
                print(emailName)
                print(Id[1])
                self.mail.store(Id[1].strip(), '+X-GM-tk.LabelS', '\\Trash')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM