web-dev-qa-db-fra.com

échec de connexion à gmail en utilisant python et imaplib

Je cherche de l'aide pour me connecter à un compte gmail et télécharger des e-mails en utilisant un script python. J'essaie d'adapter une approche trouvée ici , mais je ' m rencontrant un problème avec l'étape 1, l'accès au compte via imap.

voici le code avec lequel je commence:

import email
import imaplib

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

J'obtiens l'erreur suivante:

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 est en effet activé dans les paramètres de gmail. J'ai regardé les instructions sur le lien d'assistance Google et les questions concernant cette erreur dans des situations similaires, telles que ici et ici , mais ma situation est différente de la première car
1) cela n'a jamais fonctionné au départ, et
2) Je ne l'exécute pas si souvent pour être bloqué. C'est également différent du deuxième exemple, car il s'agit d'un compte Gmail normal, pas d'un domaine personnalisé avec un compte Google Apps.
L'utilisation de https://accounts.google.com/DisplayUnlockCaptcha pour essayer d'autoriser l'accès ne fonctionne pas non plus pour moi.

La seule chose qui permet à la connexion de fonctionner est de modifier les paramètres de sécurité de mes comptes Google pour "autoriser l'accès aux applications moins sécurisées".

Ma question est: comment puis-je corriger mon code (ou ma configuration plus généralement) pour me permettre de me connecter, sans assouplir les paramètres de sécurité de mes comptes? Existe-t-il un moyen de répondre aux exigences de sécurité en utilisant libimap?

21
whopper510

Si vous voulez éviter cette erreur sans compromettre la sécurité de votre compte, utilisez OAuth pour vous authentifier. Le protocole est documenté ici , et il y a exemple de code Python qui montre l'utilisation de XOAUTH2 avec imaplib.

Indépendamment de cela, vous devriez envisager d'activer vérification en deux étapes sur votre compte pour le rendre plus sécurisé. Si vous le faites, vous pouvez utiliser un mot de passe d'application pour vous connecter à IMAP, ce qui pourrait également éviter l'avertissement ci-dessus.

13
Jamie Nicolson

Vous pouvez essayer d'activer ceci: https://www.google.com/settings/security/lesssecureapps Cette action a résolu le même problème pour moi.

17
Alex Ols

Avec la nouvelle mise à jour de gmail, certains serveurs de messagerie ou applications sont bloqués en raison des nouveaux paramètres de sécurité de gmails. Pour résoudre ce problème, je suis allé sur la page https://www.google.com/settings/security et j'ai "activé" l'accès pour des applications moins sécurisées.

3
Raul Cavazos

J'ai pu résoudre ce problème en utilisant un navigateur en mode texte (elinks) pour vérifier ma connexion depuis le serveur distant. J'avais déjà eu du mal pendant un certain temps, alors j'avais déjà essayé d'activer des applications dangereuses et diverses autres incantations.

Après m'être connecté à gmail.com dans elinks (en utilisant l'interface html uniquement et en ayant un code de sécurité envoyé sur mon téléphone), je pouvais utiliser imaplib pour accéder au compte gmail. Vraisemblablement, on doit faire l'authentification Web à partir de la même IP que celle utilisée pour utiliser Python/imaplib.

Il est probablement préférable ™ d'utiliser le protocole OAuth, mais de cette façon, j'ai repris mon script sans le réécrire.

0
Åsmund