Vince, Thank you very much for your detailed instruction. You are great! On Fri, Aug 3, 2012 at 5:05 AM, Vince <[email protected]> wrote:
> The library/sample code at the link you provided includes a class named > "XoauthAuthenticator" with "getSession" and "connectToImap" methods on it. > > That code works fine for 3-legged OAuth, but you need to use 2-legged > OAuth access so you can impersonate users for a given domain. > > > For 2legged OAuth, just pass 'null' for the oauthToken and > oauthTokenSecret arguments for the getSession method. You can then pass > this session in as the first argument in the connectToImap method like this: > javax.mail.Store store > =XoauthAuthenticator.connectToImap(XoauthAuthenticator.getSession(...), " > imap.googlemail.com", 993, <<email address>>); > > From there, you're just using a standard-issue javax.mail.Store object, > and you can use the javamail docs for that. > > > > There are a couple code changes needed for the XoauthAuthenticator > and XoauthSaslResponseBuilder classes. > > For reference, I was able to put the below steps together using > documentation here: > > https://developers.google.com/google-apps/gmail/oauth_protocol#constructing > (especially note the "SASL Initial Client Request" section). > > > Assuming your application has already been granted 2LOA access to the " > https://mail.google.com/" scope, the following changes should work for > you: > > 1) change the XoauthAuthenticator class constructor to not put the > following 2 key/values into the props object. These are only used in > 3-legged OAuth: > - XoauthSaslClientFactory.OAUTH_TOKEN_PROP > - XoauthSaslClientFactory.OAUTH_TOKEN_SECRET_PROP > > 2) Change the code in XoauthSaslResponseBuilder.buildResponse method that > deals with putting the OAuthToken into the response. > First, remove the line: > parameters.put(OAuth.OAUTH_TOKEN, oauthToken); > > Second, change the 'url' variable to append the "xoauth_requestor_id" > parameter onto the URL so that the correct user's IMAP session is opened. > try { > url = String.format("%s?xoauth_requestor_id=%s", > url, URLEncoder.encode(userEmail, "UTF-8")); > } > catch (UnsupportedEncodingException ex) { > // not going to happen - UTF-8 is guaranteed by every jvm > } > > Good luck - > Vince. > > > On Monday, July 30, 2012 2:18:38 AM UTC-5, Jerry Wang wrote: >> >> I am writing a script to access all employees emails by using Google IMAP >> with OAuth: https://developers.google.com/**google-apps/gmail/oauth_** >> overview <https://developers.google.com/google-apps/gmail/oauth_overview> >> . This script should let me delete, move and export any users emails. >> However, I cannot find any clue in Google API to impersonate another user >> to access his email. (This impersonation is easy for Google Docs, but not >> available for Gmail. ) Please help, any suggestion will be >> appreciate. Thanks in advance. > > -- > You received this message because you are subscribed to the Google Groups > "Google Apps Domain Information and Management APIs" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/google-apps-mgmt-apis/-/h0i6xqnWrm4J. > > To post to this group, send email to > [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-apps-mgmt-apis?hl=en. > -- *Jerry Wang* Founder of Cloud Drive Software Team, Yantai, China Website: www.gdocsdrive.com Twitter: twitter.com/gdocsdrive Facebook: facebook.com/gdocsdrive <http://www.facebook.com/gdocsdrive> Phone: 86-135-735-66498 (only available from 9:00 AM to 8:00 PM GMT HK time) -- You received this message because you are subscribed to the Google Groups "Google Apps Domain Information and Management APIs" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-apps-mgmt-apis?hl=en.
