首页 > 解决方案 > Gmail SMTP XOAUTH2 错误:JWT 已过期

问题描述

昨天我创建了一个 ClientID 和 Client Secret(使用指南)来验证桌面应用程序 (C#/.NET) 以从 Gmail 帐户发送电子邮件。

我的验证和发送电子邮件的方法如下所示:

public static async System.Threading.Tasks.Task<int> SendEmailOAuth2Async(string sFromMailAddress, string sClientID, string sClientSecret)
    {
        var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        new ClientSecrets
        {
            ClientId = sClientID,
            ClientSecret = sClientSecret
        },
        new[] { "email", "profile", "https://mail.google.com/" },
        "user",
        CancellationToken.None
        ) ;

        var jwtPayload = GoogleJsonWebSignature.ValidateAsync(credential.Token.IdToken).Result;
        var username = jwtPayload.Email;

        var mailMessage = new MimeMessage();
        mailMessage.From.Add(new MailboxAddress("from name", sFromMailAddress));
        mailMessage.To.Add(new MailboxAddress("to name", "someone@outlook.com"));
        mailMessage.Subject = "Automated Mail with OAuth";
        mailMessage.Body = new TextPart("plain")
        {
            Text = "Hello"
        };



        using (var client = new SmtpClient())
        {
            client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);

            // use the access token
            var oauth2 = new SaslMechanismOAuth2(sFromMailAddress, credential.Token.AccessToken);
            client.Authenticate(oauth2);

            client.Send(mailMessage);

            client.Disconnect(true);
        }

        return 0;

    }

昨天,使用这种方法发送电子邮件有效。今天,我得到一个

System.AggregateException: '发生一个或多个错误。(JWT 已过期。)'

我是 OAuth 和令牌的新手。我该怎么做才能让它再次工作?

标签: c#oauth-2.0smtpgmailgoogle-api-dotnet-client

解决方案


推荐阅读