IMAP4LIB При использовании команды store я получаю ошибку «BAD [b'Could not parse command ']» - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок во всем этом, так что извините, если я испортил это или уже сделал беспорядок. У меня есть два класса GUI и мой класс MailSorter в классе GUI. У меня есть метод, который регистрируется, затем один, который выбирает все EmailIds, а затем, наконец, получает все электронные письма From и сохраняет их в формате dict. в котором хранится электронная почта От, и сколько раз она появляется, а также массив с электронной почтой От и идентификатором.

    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)

Таким образом fetchFrom принадлежит классу mailSorter, а остальные два GUI класс, когда я вызываю deleteEmail, я получаю сообщение об ошибке:

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']

, но когда я запускаю его как текстовую базу без GUI и использую пример электронной почты, все работает нормально:

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

1 Ответ

0 голосов
/ 17 апреля 2020

Код удаления почты

    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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...