2016-05-05 4 views
-1

Я пытаюсь получить информацию из всех папок, но, кажется, что код дает мне следующее сообщение об ошибке:Python IMAP выбрать несколько папок

команда ПОИСК нелегальную в государственной AUTH, допускается только в отдельных государствах

Я искал его, но никаких результатов для меня.

Это код:

 M = imaplib.IMAP4_SSL('',993) 
     M.login(user,password) 
     folders = M.list() 

     for folder in folders[1]: 

      for allfolders in re.findall('"\/"(.*)',folder): 

       finalfolders = allfolders.replace(" ",'') 

       M.select(finalfolders, readonly=True) 

       print finalfolders 

       typ, data = M.search(None, 'ALL') 

       for num in data[0].split(): 
        typ, data = M.fetch(num, '(RFC822)') 
        email_message = email.message_from_string(data[0][1]) 
        su = email_message['From'] 

        allz = re.findall("<(.*)>",su) 

        for x in allz: 

         print x 

        results.write(x+'\n') 
        results.flush() 
        #print su 
       M.close() 
       M.logout() 

В основном я пытаюсь извлечь «из», из всех папок, основанных на мою учетную запись электронной почты.

+0

Похоже, что вы игнорируете возвращаемое значение из 'M.login'; возможно, вы должны это проверить. Какая строка генерирует трассировку? – larsks

+0

Привет, проблема возникает после второго цикла, здесь M.select (finalfolders, readonly = True). Если я переведу остальную часть кода после второго цикла 2 шага назад, к сожалению, вы получите только последнюю папку, но я хочу, чтобы все они были. – pythy

ответ

0

Вы можете выбрать только одну папку, выбранную в любой момент времени, используя одно соединение IMAP. Это означает, что ваш код должен EXAMINE или SELECT почтовый ящик на первом, а затем FETCH все, что вам нужно скачать, а затем сделать не вызов CLOSE, поскольку она удаляет сообщения, помеченные для удаления, и при входе в следующий цикл итерации, вызов EXAMINE или SELECT раз снова и ...

Смежные вопросы