Читать Gmail API через прокси-сеть - PullRequest
0 голосов
/ 16 января 2019

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

private static string[] Scopes = { GmailService.Scope.MailGoogleCom };
private static string ApplicationName = "Gmail API .NET Quickstart";

private static void Main(string[] args)
{
    UserCredential credential;

    using (var stream =
        new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = "token.json";
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
        Console.WriteLine("Credential file saved to: " + credPath);
    }

    // Create Gmail API service.
    var service = new GmailService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    var inboxlistRequest = service.Users.Messages.List("me");
    inboxlistRequest.LabelIds = "INBOX";
    inboxlistRequest.IncludeSpamTrash = false;
    //get our emails
    var emailListResponse = inboxlistRequest.Execute();

    if (emailListResponse != null && emailListResponse.Messages != null)
    {
        //loop through each email and get what fields you want...
        foreach (var email in emailListResponse.Messages)
        {
            var emailInfoRequest = service.Users.Messages.Get("me", email.Id);
            var emailInfoResponse = emailInfoRequest.Execute();

            if (emailInfoResponse != null)
            {
                String from = "";
                String date = "";
                String subject = "";

                string emailbody = emailInfoResponse.Snippet.Replace(" ", "");
                Console.WriteLine(emailbody);

                //loop through the headers to get from,date,subject, body
                foreach (var mParts in emailInfoResponse.Payload.Headers)
                {
                    if (mParts.Name == "Date")
                    {
                        date = mParts.Value;
                    }
                }
            }
        }
    }
    Console.ReadLine();
}

Я пробовал следовать xml в app.config, но безуспешно.

  <system.net>
    <defaultProxy>
      <proxy
        proxyaddress="my proxy and port"
      />
    </defaultProxy>
  </system.net> 

Я посмотрел на свойство httpclientfactory в gmailService, но не знаю, как его использовать. Могу ли я узнать, какие изменения я могу сделать в приведенном выше коде, чтобы я мог запустить это через прокси.

...