通过 Google API 从 ASP.NET 应用程序发送电子邮件

Sending emails via Google API from a ASP.NET application

提问人:DisplayName 提问时间:8/16/2019 最后编辑:DisplayName 更新时间:8/19/2019 访问量:527

问:

因此,在过去的 2 年里,我一直在通过 GmailService 从我的 .NET WebApp 发送电子邮件,现在它突然停止工作。这是我发送电子邮件的一段代码。

它断了

var renew = 凭据。GetAccessTokenForRequestAsync()。结果;

出现以下错误:

{错误:“invalid_grant”, 描述:“错误的请求”, URI:“”}

var tokenResponse = new TokenResponse { RefreshToken = sendData.refreshToken };
UserCredential credential = new UserCredential(new ForceOfflineGoogleAuthorizationCodeFlow(
        new GoogleAuthorizationCodeFlow.Initializer
        {
            ClientSecrets = new ClientSecrets
            {
                ClientId = sendData.clientID,
                ClientSecret = sendData.clientSecret
            },
            Scopes = Scopes
        }
        ),
        "me",
        tokenResponse);

var renew = credential.GetAccessTokenForRequestAsync().Result;

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

var message = CreateRawMessageSystemNet(sendData.sendToAddresses,sendData.subject,sendData.body,sendData.email,sendData.emailDisplayName,sendData.attachments);

var result = service.Users.Messages.Send(new Message
{
    Raw = message
}, "me").Execute();

对于UserCredential IAuthorizationCodeFlow参数,我使用的是类

internal class ForceOfflineGoogleAuthorizationCodeFlow : GoogleAuthorizationCodeFlow
{
    public ForceOfflineGoogleAuthorizationCodeFlow(GoogleAuthorizationCodeFlow.Initializer initializer) : base(initializer) { }

    public override AuthorizationCodeRequestUrl CreateAuthorizationCodeRequest(string redirectUrl)
    {
        return new GoogleAuthorizationCodeRequestUrl(new Uri(AuthorizationServerUrl))
        {
            ClientId = ClientSecrets.ClientId,
            Scope = string.Join(" ", Scopes),
            RedirectUri = redirectUrl,
            AccessType = "offline",
            ApprovalPrompt = "force"
        };
    }
}

如果在发送时想知道对象凭据的内容,如下所示: enter image description here Scopes 变量为“https://mail.google.com/"

提前非常感谢!

c# asp.net google-api gmail-api 服务器端

评论

0赞 Rafa Guillermo 8/16/2019
您还在经历这种行为吗?
0赞 DisplayName 8/19/2019
嘿!正如你在这里看到的,我终于设法解决了这个问题。

答:

2赞 DisplayName 8/19/2019 #1

看起来我设法解决了这个问题。代码没有错,代码运行良好。问题出在刷新令牌上。为了解决这个问题,我不得不去 https://developers.google.com/oauthplayground。然后在右侧单击齿轮,“使用您自己的 OAuth 凭据”,并且必须插入到 ClientID 和 Client secret。在左侧,在步骤1下方,我必须选择Gmail API(https://mail.google.com/),然后单击“授权API”。通过这样做,在步骤 2 下,我收到了一个新的授权代码,在单击“交换令牌的授权代码”时,我收到了新的刷新令牌。 现在,在将新的刷新令牌插入到

var tokenResponse = new TokenResponse { RefreshToken = sendData.refreshToken };

代码按其所支持的方式工作。