Access Gmail Imap with OAuth 2.0 Access token
-
22-04-2021 - |
Question
I am using Google's Oauth 2.0 to get the user's access_token, but I dont know how to use it with imaplib to access inbox.
Solution
Below is the code for IMAP with oauth 2.0
email = 'k@example.com'
access_token = 'vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg'
auth_string = 'user=%s\1auth=Bearer %s\1\1' % (email, access_token)
imap_conn = imaplib.IMAP4_SSL('imap.gmail.com')
imap_conn.debug = 4
imap_conn.authenticate('XOAUTH2', lambda x: auth_string)
imap_conn.select('INBOX')
for more details see the library code.
OTHER TIPS
Currently you can use OAuth 1.0 to access Gmail over IMAP and SMTP, but OAuth 2.0 is not yet supported. Here is a link to more information: https://developers.google.com/google-apps/gmail/oauth_overview
This is something I've been kicking around. I didn't want to juggle refreshing access tokens and what not myself -- I also found there was too much boilerplate code in the Google example. I decided just to write very simple wrappers that allow for OAuth2 IMAP and SMTP that utilize Credentials and Flow objects from google-api-python-client.
Hopefully this helps somebody.
IMAP does not support accessing inbox without password -> so imaplib doesnt