我正在尝试在 asp.net c# 中使用 google API 发送电子邮件并收到错误 400 redirect_uri_mismatch

Posted

技术标签:

【中文标题】我正在尝试在 asp.net c# 中使用 google API 发送电子邮件并收到错误 400 redirect_uri_mismatch【英文标题】:I am trying to send email using google API in asp.net c# and getting Error 400 redirect_uri_mismatch 【发布时间】:2021-01-23 11:16:22 【问题描述】:

下面是我的代码:

public void sendemail()

    static string[] Scopes =  GmailService.Scope.GmailSend;
    static string ApplicationName = "GmailAPIWeb";

    string CLIENT_ID = "***********************";
    string CLIENT_SECRET = "************";

    var secrets = new ClientSecrets
    
        ClientId = CLIENT_ID,
        ClientSecret = CLIENT_SECRET
    ;

    //Error will throw from here...
    var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        secrets,
        Scopes, "user",
        CancellationToken.None, null
         //new FileDataStore(credPath, true)
        ).Result;

    var service = new GmailService(new BaseClientService.Initializer()
    
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    );

    //Create Message`enter code here`
    MailMessage mail = new MailMessage();
    mail.Subject = "Subject!";
    mail.Body = "This is <b><i>body</i></b> of message";
    mail.From = new MailAddress("jayesh@gmail.com");
    mail.IsBodyhtml = true;

    mail.To.Add(new MailAddress("jayesh@gmail.com"));
    MimeKit.MimeMessage mimeMessage = 
    MimeKit.MimeMessage.CreateFromMailMessage(mail);

    var gmailMessage = new Google.Apis.Gmail.v1.Data.Message
    
        Raw = Encode(mimeMessage.ToString())
    ;

    //Send Email
    var result = service.Users.Messages.Send(gmailMessage, "me/OR UserId/EmailAddress").Execute();

请求中的重定向 URI http://127.0.0.1:55878/authorize/ 与授权给 OAuth 客户端的重定向 URI 不匹配。要更新授权的重定向 URI,请访问:https://console.developers.google.com/apis/credentials/oauthclient/$your_client_id?project=$your_project_number

我想使用 c# 使用 google api 发送电子邮件。

【问题讨论】:

欢迎来到 *** 看起来这个错误是不言自明的。您是否将重定向添加到 Google? 欢迎加入堆栈,请编辑您的问题并包含您的代码,确保在 Google 开发者控制台中为您的项目添加 127.0.0.1:55878/authorize 作为重定向 uri。 我在 Google 开发者控制台中添加了 localhost:44381/Default.aspx 作为重定向 uri。 GoogleWebAuthorizationBroker.AuthorizeAsync 适用于已安装的应用程序,您需要将 developers.google.com/api-client-library/dotnet/guide/… 用于 Web 应用程序。客户端库使用的重定向 uri 如下127.0.0.1:55878/authorize 您不能将其设置为任何值。您需要将客户端库正在使用的那个添加到谷歌开发者控制台。为什么要将 filedatastore 设置为 null? 我在谷歌搜索文件数据存储为空时收到了评论,所以 【参考方案1】:

请求中的重定向 URI http://127.0.0.1:55878/authorize/ 与授权给 OAuth 客户端的重定向 URI 不匹配。要更新授权的重定向 URI,请访问:https://console.developers.google.com/apis/credentials/oauthclient/$your_client_id?project=$your_project_number

就是这个意思。您从应用程序发送的重定向 uri http://127.0.0.1:55878/authorize/ 必须与您在 Google 开发者控制台中设置的完全匹配

Web 应用程序与已安装的应用程序。

GoogleWebAuthorizationBroker.AuthorizeAsync 用于已安装的应用程序,旨在在运行代码的机器上打开同意屏幕。如果您想将它托管在网络服务器上,这将不起作用。您需要为 Web 应用程序使用 Web applications (ASP.NET MVC)。

FileDataStore 为空

这真的没关系,因为您不应该使用 GoogleWebAuthorizationBroker.AuthorizeAsync,通过将 Idatastore 设置为 null 您只是告诉它使用 FileDataStore,这是安装的应用程序客户端将用于存储凭据的默认数据存储

//new FileDataStore(credPath, true)

验证

您可能希望尽早检查您的应用程序的验证,通过 google 验证具有 gmail 范围的应用程序可能需要一段时间,因为它是通过第三方公司完成的,而且非常昂贵。

【讨论】:

我的重定向网址是localhost:44381/authorize.aspx,它显示不同

以上是关于我正在尝试在 asp.net c# 中使用 google API 发送电子邮件并收到错误 400 redirect_uri_mismatch的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# 在 ASP.net 中更改背景图像

如何使用 HttpClient 在 ASP.Net C# 中禁用分块传输编码

在 C#、asp.net、windows 身份中模拟

C# Asp.Net 中的类和对象

如何使用c#在asp.net网页中显示C程序错误

如何使用 C# 在 ASP.NET 中使用 MySql 数据库 [重复]