0

I am trying to sync my mails from gmail to my local server using OfflineImap v7.2.1. I followed this tutorial: Using Offlineimap with the Gmail IMAP API and got it working!

Here is my .offlineimaprc file:

 [general]
    accounts = ExampleCompany

    [Account ExampleCompany]
    localrepository = ExampleCompanyLocal
    remoterepository = ExampleCompanyRemote
    postsynchook = notmuch new
    #newer versions don't need this
    #status_backend = sqlite

    [Repository ExampleCompanyRemote]
    type = IMAP
    remotehost = imap.gmail.com
    remoteuser = my-username@gmail.com
    ssl = yes
    starttls = no
    sslcacertfile = /etc/ssl/certs/ca-certificates.crt
    ### You'll need to configure the gmail API stuff here:
    auth_mechanisms = XOAUTH2
    oauth2_client_id = XXXX7-eXXXX.apps.googleusercontent.com
    oauth2_client_secret = 9XXXXXP
    oauth2_request_url = https://accounts.google.com/o/oauth2/token
    #oauth2_refresh_token = 1/ZXXXXXw
    oauth2_access_token = ya29.XXXXXIHbcS
    ## remove Gmail prefix on IMAP folders
    nametrans = lambda f: f.replace('[Gmail]/', '') if 
   f.startswith('[Gmail]/') else f

    [Repository ExampleCompanyLocal]
    type = Maildir
    localfolders = ~/mail
    restoreatime = no
    # Do not sync this folder
    folderfilter = lambda folder: folder not in ['2007-2011-inbox']
    ## Remove GMAIL prefix on Google-specific IMAP folders that are pulled     down.
    nametrans = lambda f: '[Gmail]/' + f if f in ['Drafts', 'Starred',     'Important', 'Spam', 'Trash', 'All Mail', 'Sent Mail'] else f 

I currently generate my Access Token and Refresh Token using this python script from google. I would however like this tokens to be generated from an ios app and then sent to the backend to start syncing. I am using AppAuth to do this but OfflineImap always errors out when using these credentials gotten from the IOS app. error

ERROR: All authentication types failed:
     XOAUTH2: [AUTHENTICATIONFAILED] Invalid credentials (Failure)

Any idea why these credentials will be invalid? I am using the same client_id and client_secret when running the script and the app. I think i am missing something obvious.

Here is the authorization request on the app in swift:

 // builds authentication request
    let request = OIDAuthorizationRequest(configuration: configuration,
                                          clientId: "XXXX7-eXXXX.apps.googleusercontent.com",
                                          clientSecret: "9XXXXXP",
                                          scopes: [OIDScopeEmail],
                                          redirectURL: redirectURI,
                                          responseType: OIDResponseTypeCode,
                                          additionalParameters: nil)

Thank you

SomeGuyFortune
  • 1,024
  • 13
  • 26
  • The script your running from the instructions require you to generate your own OAuthClientID and client_secret from [Google Dev Console](https://console.developers.google.com/). – ReyAnthonyRenacia Aug 30 '18 at 11:38
  • Yes it doesn. And i do that. And it works. The problem is when i use those same Client_id and Client_secrete in the app instead of the script to generate the refresh token. OfflineImap doesn't seem to work with the refresh token whenever it comes from the app – SomeGuyFortune Aug 30 '18 at 14:42

0 Answers0