Ошибка входа в Gmail с использованием python и imaplib

Я ищу помощь в регистрации в учетной записи gmail и загрузке некоторых писем с помощью python script. Я пытаюсь адаптировать найденный подход здесь, но я столкнулся с проблемой с шагом 1, обращаясь к учетной записи через imap.

вот код, который я начинаю с:

import email
import imaplib

m = imaplib.IMAP4_SSL("imap.gmail.com",993)
rc, resp = m.login('myemailaddress','mypassword')

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "email.py", line 1, in <module>
    import email, imaplib
  File "/home/will/wd/email.py", line 14, in <module>
     m.login('myemailaddress','mypassword')
  File "/usr/lib/python3.4/imaplib.py", line 538, in login
    raise self.error(dat[-1])
 imaplib.error: b'[ALERT] Please log in via your web browser: http://support.google.com/mail/accounts/bin/answer.py?answer=78754 (Failure)'

Imap действительно включен в настройках gmail. Я просмотрел инструкцию по ссылке поддержки google и вопросы относительно этой ошибки в подобных ситуациях, например здесь и здесь, но моя ситуация отличается от первой, потому что
1) она никогда не срабатывала, и 2) Я не запускаю ее так часто, чтобы ее заблокировали. Он также отличается от второго примера, потому что это обычная учетная запись gmail, а не настраиваемый домен с учетной записью Google Apps.
Использование https://accounts.google.com/DisplayUnlockCaptcha, чтобы попытаться разрешить доступ, также не работает для меня.

Единственное, что позволяет войти в систему, - это изменить настройки безопасности учетных записей google, чтобы "разрешить доступ для менее безопасных приложений".

Мой вопрос: как я могу исправить свой код (или мою настройку в более общем плане), чтобы я мог войти в систему, не отключив настройки безопасности моих учетных записей? Есть ли способ удовлетворить требования безопасности с помощью libimap?

Ответы

Ответ 1

Если вы хотите избежать этой ошибки без ущерба для безопасности своей учетной записи, используйте OAuth для аутентификации. Протокол документирован здесь, и есть код примера Python который показывает использование XOAUTH2 с imaplib.

Независимо от этого, вы должны рассмотреть возможность включения двухэтапной аутентификации в вашей учетной записи, чтобы сделать ее более безопасной. Если вы это сделаете, вы можете использовать Пароль приложения для подключения к IMAP, что также может избежать предупреждения выше.

Ответ 3

При обновлении нового gmail некоторые почтовые службы или приложения блокируются из-за новых настроек безопасности gmails. Чтобы решить эту проблему, я перешел на страницу https://www.google.com/settings/security и "включен" для менее безопасных приложений.

Ответ 4

Мне удалось решить эту проблему, используя браузер текстового режима (elinks), чтобы проверить мой логин с удаленного сервера. Я уже некоторое время боролся, поэтому я уже пытался включить небезопасные приложения и различные другие заклинания.

После входа в gmail.com в elinks (используя интерфейс html и имеющий код безопасности, отправленный на мой телефон), я могу использовать imaplib для доступа к учетной записи gmail. Предположительно, необходимо выполнить проверку подлинности в Интернете с того же IP-адреса, который пытается использовать Python/imaplib.

Вероятно, лучше и торговать; для использования протокола OAuth, но таким образом я снова запустил свой script, не переписывая его.