Gmail api,在Android中使用oauth2发送电子邮件

时间:2015-03-13 14:08:27

标签: android oauth oauth-2.0 gmail

我一直在寻找一个解决我的问题的解决方案,但没有结果。我找到的答案接近我想要的,但它还不足以让它真正起作用。

我想要什么?

我希望在为我的程序提供oauth2特权之后,让我的程序用户可以使用自己的Gmail帐户发送电子邮件。然后,我的程序将使用该帐户在某些条件下(以编程方式)向所需的接收者发送电子邮件(这也可以是您自己)。这意味着,在用户使用oauth2授予​​权限后,我的程序将决定何时通过电子邮件发送包含该电子邮件内容的所需接收者。这当然只是为了用户的最佳利益,当他/她打开它时,他们将完全了解这个功能。

到目前为止我做了什么?

当然,我已经在console.developers.google.com上启用了Gmail API并尝试了不同类型的凭据(本机/安卓...)

我一直在阅读,尝试阅读和尝试......

https://developers.google.com/gmail/api/

Handling expired access token in Android without user concent

looking for Android Gmail SMTP Oauth example

How to Login into Gmail using OAuth in Android Application?

https://developers.google.com/accounts/docs/OAuth2

http://developer.android.com/google/auth/http-auth.html

https://developers.google.com/api-client-library/java/apis/gmail/v1

https://developers.google.com/api-client-library/java/google-api-java-client/oauth2

https://developers.google.com/accounts/docs/OAuth2ForDevices

使用Android,Gmail,oauth,电子邮件,发送等字词,搜索条件的每个组合都会显示前20个Google搜索结果。

我使用的代码与我使用的源代码有所不同,可以在我的程序(app)中选择一个Google帐户。在选择一个帐户后,下面是(在这一点上的丑陋)代码的一部分。根据我使用的代码部分(取消注释),我会得到不同的错误代码,例如403:访问未配置或401:未授权

@Override
protected Void doInBackground(Void... params) {

    String token = null;

    try {

        token = GoogleAuthUtil.getToken(activity, userId, scope);

        if (token != null) {
            //Log.e("token", token);

            // send test mail
            HttpTransport transport = new NetHttpTransport();
            JsonFactory jsonFactory = new JacksonFactory();
            // load secret  
            //Reader secret = new InputStreamReader(activity.getAssets().open("secret.json"));
            //GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory, secret);
            // add scopes
            //Collection<String> scopes = new ArrayList<String>();
            //scopes.add(OAuthScopes.GMAIL.COMPOSE.getLocation());

            //GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, clientSecrets, scopes)
            //  .setAccessType("online").setApprovalPrompt("auto").build();

            //String url = flow.newAuthorizationUrl().setRedirectUri(GoogleOAuthConstants.OOB_REDIRECT_URI).build();

            //GoogleCredential credential = new GoogleCredential().setAccessToken(token);

            Reader secret = new InputStreamReader(activity.getAssets().open("secret.json"));
            GoogleCredential credential = new GoogleCredential.Builder().setClientSecrets(GoogleClientSecrets.load(jsonFactory, secret))
                    .build();

            Gmail gm = new Gmail.Builder(transport, jsonFactory, credential).setApplicationName("Test").build();

            //Gmail gm = new Gmail(httpTrans, jsf, null); 

            Properties properties = new Properties();
            properties.put("mail.smtp.starttls.enable", "true");
            properties.put("mail.smtp.starttls.required", "true");
            properties.put("mail.smtp.sasl.enable", "false");

// etc

希望有人可以帮助我!

0 个答案:

没有答案