Получить фид Gmail Inbox Google.Apis C#. NET - PullRequest
0 голосов
/ 20 июня 2020

Мне нужно прочитать фид входящей почты Gmail с помощью Oauth2.0. Имитируя в почтальоне,

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 right в моем объеме и получил мои электронные каналы. Работает !!!

Почтальон генерирует код в C #, но срок действия токена истекает.

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 и уже используется token refre sh.

С помощью приведенного ниже кода я получил авторизацию от приложения, но я не могу прочитать xml фид атомов


            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.

Может ли кто-нибудь помочь мне, как я выполняю этот вызов, чтобы получить поток атомов, используя предоставленный токен. Если есть и более простой способ сделать это, было бы здорово поделиться.

Спасибо

1 Ответ

0 голосов
/ 23 июня 2020

Решено с использованием respsharp, restclient !!

tks

...