【问题标题】:Get Gmail Inbox feed Google.Apis C# .NET获取 Gmail 收件箱提要 Google.Apis C# .NET
【发布时间】:2020-10-10 15:03:42
【问题描述】:

我需要使用 Oauth2.0 阅读 gmail 收件箱提要。在邮递员中模拟,

Auth URL : https://accounts.google.com/o/oauth2/auth
Access Token URL : https://accounts.google.com/o/oauth2/token
Client ID : XXXXX.apps.googleusercontent.com
Client Secret : XXXXX
Scope : https://mail.google.com/mail/feed/atom
GrantType: Authorization Code

我请求了令牌并在标头上使用了它

Authorization - Bearer XXXXXXXXXX.

我在我的范围内通过 GET 提出了请求并获得了我的电子邮件提要。好用!!!

邮递员用C#生成代码,但是token过期了。

var client = new RestClient("https://mail.google.com/mail/feed/atom/");
var request = new RestRequest(Method.GET);
request.AddHeader("postman-token", "d48cac24-bd3e-07b5-c616-XXXXXXXX");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Bearer ya29.a0AfH6SMDZlUmw0xLHAoYIJuIfTkXXXXXXXXQSPP17GmXT26fJEfWB9w8UiwQ2YF32-nOp6zY9H_lwJEEXXXXXXXXXXXYK4e0tcZkieGbBl5Eow2M-7Gxp20kfDtXXXXXVjiXymLXyMkYEI");
IRestResponse response = client.Execute(request);

我正在尝试通过 Google.Api,使用 GoogleAuthorizationCodeFlow 并且已经在使用令牌刷新。

使用下面的代码,我获得了应用程序的授权,但我无法读取 xml atom 提要


            GoogleAuthorizationCodeFlow flow;
            var assembly = Assembly.GetExecutingAssembly();
            var clientfile = @"client_secrets.json";

            using (var stream = new FileStream(clientfile, FileMode.Open, FileAccess.Read))
            {
                flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    DataStore = new FileDataStore("StoreTest"),
                    ClientSecretsStream = stream,
                    Scopes = new[] { "https://mail.google.com/mail/feed/atom/" }
                });
            }

            var uri = Request.Url.ToString();
            var code = Request["code"];
            if (code != null)
            {
                var token = flow.ExchangeCodeForTokenAsync(UserId, code,
                    uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                // Extract the right state.
                var oauthState = AuthWebUtility.ExtracRedirectFromState(
                    flow.DataStore, UserId, Request["state"]).Result;
                Response.Redirect(oauthState);
            }
            else
            {
                var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId,
                    CancellationToken.None).Result;
                if (result.RedirectUri != null)
                {
                    // Redirect the user to the authorization server.
                    Response.Redirect(result.RedirectUri);
                }
                else
                {
                    // The data store contains the user credential, so the user has been already authenticated.
                    
                   var gmailfeed = new GmailService(new BaseClientService.Initializer
                    {
                        HttpClientInitializer = result.Credential,
                        ApplicationName = "GetFeed",
                        
                    });

                    var inboxlistRequest = gmailfeed.Users.Messages.List("me");
                    inboxlistRequest.LabelIds = "Label_19780355190759038";
                    inboxlistRequest.IncludeSpamTrash = false;
                    var emailListResponse = inboxlistRequest.Execute();

                    foreach (var mail in emailListResponse.Messages)
                    {
                        var mailId = mail.Id;
                        var threadId = mail.ThreadId;
                     
                        Message message = gmailfeed.Users.Messages.Get("me", mailId).Execute();
                        Console.WriteLine((message.Snippet));
                    }

                }
            }



我必须阅读电子邮件,但我需要 xml atom 提要。

有人可以帮助我如何使用授予的令牌进行此调用以获取原子提要。如果也有更简单的方法,那就分享一下吧。

谢谢

【问题讨论】:

    标签: c# oauth-2.0 google-api google-oauth


    【解决方案1】:

    使用 respsharp、restclient 解决!!

    tks

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2014-10-10
      相关资源
      最近更新 更多