提问人:DisplayName 提问时间:8/16/2019 最后编辑:DisplayName 更新时间:8/19/2019 访问量:527
通过 Google API 从 ASP.NET 应用程序发送电子邮件
Sending emails via Google API from a ASP.NET application
问:
因此,在过去的 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"
};
}
}
如果在发送时想知道对象凭据的内容,如下所示: Scopes 变量为“https://mail.google.com/"
提前非常感谢!
答:
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 };
代码按其所支持的方式工作。
评论