3

I wanna access gmail use python and oauth2.0,so I download the oauth2.py from "http://google-mail-oauth2-tools.googlecode.com/svn/trunk/python/oauth2.py". And this is my demo:

import oauth2
import imaplib
import email
from oauth2client.client import OAuth2WebServerFlow
from launchpadlib.credentials import access_token_page

email = '[email protected]'
client_id = 'client_id'
client_secret = 'client_secret'
# Check https://developers.google.com/drive/scopes for all available scopes
OAUTH_SCOPE = 'https://mail.google.com/'
# Redirect URI for installed apps
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
flow = OAuth2WebServerFlow(client_id, client_secret, OAUTH_SCOPE, REDIRECT_URI)
authorize_url = flow.step1_get_authorize_url()
print 'Go to the following link in your browser: ' + authorize_url
authorization_code = raw_input("Please input the code:").strip()
response = oauth2.AuthorizeTokens(client_id, client_secret, authorization_code)
access_token = response['access_token']
auth_string = oauth2.GenerateOAuth2String(email,access_token,base64_encode=True)
print auth_string
imap_conn = imaplib.IMAP4_SSL('imap.gmail.com')
imap_conn.debug = 4
imap_conn.authenticate('XOAUTH2',lambda x:auth_string)
imap_conn.select('INBOX')

But the demo has some bugs,I don't know how to debug it.The information from console:

  16:58.52 > KOMN1 AUTHENTICATE XOAUTH2
  16:58.79 < + 
  16:58.79 write literal size 204
  16:59.27 < + eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
  16:59.27 write literal size 204
  16:59.27 < KOMN1 NO Invalid SASL argument. d10if1169757igr.56
  16:59.27 NO response: Invalid SASL argument. d10if1169757igr.56
Traceback (most recent call last):
  File "/home/karl/workspace/Gmail/download_gmail/download_gmail_api.py", line 33, in <module>
    imap_conn.authenticate('XOAUTH2',lambda x:auth_string)
  File "/usr/lib/python2.7/imaplib.py", line 351, in authenticate
    raise self.error(dat[-1])
imaplib.error: Invalid SASL argument. d10if1169757igr.56

I need help.

3
  • this page may be useful Commented Feb 14, 2014 at 10:54
  • developers.google.com/api-client-library/python/guide/aaa_oauth I will add this page to the one @goncalopp linked. Its calendar but it has a lot of explanation that might help you understand. Commented Feb 14, 2014 at 11:42
  • I do not think that you need oauth to access the emails with imap. Commented Feb 14, 2014 at 12:29

1 Answer 1

1

The auth_string should not be base64encoded. I believe the IMAP4.authenticate encodes it for you. It worked for me anyways.

For example: auth_string = 'user=%s\1auth=Bearer %s\1\1' % (user, access_token)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.