Grupo Microsistemas Ответов: 1

Как обновить токен oauth2 C# desktop?


Здравствуйте, у меня есть приложение, которое правильно отправляет электронные письма, проблема в том, что позже в тот же день появляется ошибка с надписью "код ошибки аутентификации:334". Я думаю, что мне нужно обновить токен или, может быть, gmail smtp имеет ограничение на бесплатные электронные письма.

Что я уже пробовал:

Я пытался найти в интернете, но я нахожу только код для веб-приложений, а мой-рабочий стол

Вот мой код


try
            {
                using (var stream = new FileStream("credential.json", FileMode.Open, FileAccess.Read))
                {
                    string credPath = "token.json";
                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                        Scopes = new[] { "https://mail.google.com/" },
                        "user@gmail.com",
                        CancellationToken.None,
                        new FileDataStore(credPath, true)).Result;
                    Console.WriteLine("Credential file saved to: " + credPath);
                }
                var service = new GmailService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = ApplicationName,
                });
                var message = new MimeKit.MimeMessage();
                message.From.Add(new MimeKit.MailboxAddress("User", "user@gmail.com"));
                message.To.Add(new MimeKit.MailboxAddress("Test", "test@gmail.com"));
                message.Subject = "Test";
                message.Body = new MimeKit.TextPart("plain")
                {
                    Text = "Test"
                };
                using (var client = new MailKit.Net.Smtp.SmtpClient())
                {
                    client.Connect("smtp.gmail.com", 587);
                    // use the access token 
                    var oauth2 = new MailKit.Security.SaslMechanismOAuth2(credential.UserId, credential.Token.AccessToken);
                    client.Authenticate(oauth2);
                    client.Send(message);
                    client.Disconnect(true);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

1 Ответов

Рейтинг:
10

Garth J Lancaster

Я уверен, что вы недавно задавали тот же вопрос .. эта должность Вопрос: как пройти аутентификацию с помощью маркера доступа OAUTH2? · Выпуск №606 · jstedfast/MailKit · GitHub[^]

указывает на то, что

await credential.RefreshTokenAsync(CancellationToken.None);
кажется, это недостающая часть - все равно прочтите и посмотрите, поможет ли вам что-нибудь там.