GSuite отправка писем от C# - PullRequest
0 голосов
/ 07 мая 2020

Я использую приложение C# для отправки электронной почты.

Итак, сначала я проверяю

public async void LogIn()
{
    var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        new ClientSecrets
        {
            ClientId = "-id-",
            ClientSecret = "-secret-"
        },
        new[] { "email", "profile", "https://mail.google.com/" },
        "user",
        CancellationToken.None
    );

    await credential.RefreshTokenAsync(CancellationToken.None);
    accessToken = credential.Token.AccessToken;
    var signature = await GoogleJsonWebSignature.ValidateAsync(credential.Token.IdToken);
    username = signature.Email;
}

Я проверяю

var oauth2 = new SaslMechanismOAuth2(username, accessToken);  
client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
client.Authenticate(oauth2);

Затем я создать сообщение И затем я отправляю их ... и это нормально, но через час или около того (не уверен, что это ровно через час) он дает мне «4.7.0 Connection expired, попробуйте повторно подключиться. o6sm1377557lja.70 - gsmtp».

Итак, я go, чтобы повторить соединение и аутентификацию, но что бы я ни делал (я пытался повторить всю процедуру аутентификации, заменив объект SmtpClient [Mailkil], воссоздав объект oauth, когда метод AUthenticate попадает в него выдает ошибку «334: blabla», blabla является носителем и c. материала, закодированного в Base64.

Пока что единственное решение, которое я нашел, - УДАЛИТЬ сохраненный токен и полностью повторно аутентифицировать его с нуля. Это не очень удобно.

Кто-нибудь знает, как это сделать правильно?

EDIT:

Я читал, что 334 - это, возможно, какой-то запрос на получение учетных данных? это пришло как сообщение об ошибке. IIR C, если вы продолжите попытки авторизации, выдаст ошибку «неправильные учетные данные».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...