使用 Google GmailAPI 发送邮件不起作用

Posted

技术标签:

【中文标题】使用 Google GmailAPI 发送邮件不起作用【英文标题】:using Google GmailAPI send mail not working 【发布时间】:2021-11-24 13:09:16 【问题描述】:

我需要帮助。程序 WebApplication 代码 C# Asp.Net

首先,我实现了一种将 URI 放入 Google OAuth 2 授权的方法。 下载Json文件供程序读取文件并生成token。

错误

无法启动浏览器并显示“https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=879100301665-3hpkd1h812d5eejji8o4mku3c2ci3rcs.apps.googleusercontent.com&redirect_uri=http%3A%2F%2F127 .0.0.1%3A63526%2Fauthorize%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send”进行授权。有关详细信息,请参阅内部异常。

其次,我曾经通过在 Google OAuth 2 授权中分配 Client IDClient secret 来将值放入 Programs 中。

错误 拒绝访问路径“C:\Windows\system32\config\systemprofile”

【问题讨论】:

请编辑您的问题并包含您的代码而不是您的代码图像。 【参考方案1】:

你正在做的事情有很多问题。

首先,您已经在 Google 云控制台上创建了看似 Web 应用程序凭据的内容。但是,您使用的代码 GoogleWebAuthorizationBroker.AuthorizeAsync 仅适用于已安装的应用程序。这就是您收到错误的原因。

创建一个asp .net core web app的代码如下

public void ConfigureServices(IServiceCollection services)

    ...

    // This configures Google.Apis.Auth.AspNetCore3 for use in this app.
    services
        .AddAuthentication(o =>
        
            // This forces challenge results to be handled by Google OpenID Handler, so there's no
            // need to add an AccountController that emits challenges for Login.
            o.DefaultChallengeScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
            // This forces forbid results to be handled by Google OpenID Handler, which checks if
            // extra scopes are required and does automatic incremental auth.
            o.DefaultForbidScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
            // Default scheme that will handle everything else.
            // Once a user is authenticated, the OAuth2 token info is stored in cookies.
            o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        )
        .AddCookie()
        .AddGoogleOpenIdConnect(options =>
        
            options.ClientId = YOUR_CLIENT_ID;
            options.ClientSecret = YOUR_CLIENT_SECRET;
        );

您遇到的第二个问题是您添加的重定向 uri 不是有效的 URL,它需要是 https:// 至少您缺少 //。以及客户端库将使用 /signin-google 发送请求的事实

所以正确的重定向 uri 应该更像这样。

https://localhost:5001/signin-google

我有一个 YouTube 视频,其中显示 How to get a Google users profile information, with C#. 和一个配套的博客帖子 Asp .net core 3 and Google login 两者都应该适用于 .net 5。

【讨论】:

以上是关于使用 Google GmailAPI 发送邮件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用带有服务帐户的 gmail api 或 google Oauth 来发送邮件?

使用 GMAIL API 跟踪电子邮件发送状态

尝试使用 gmail api 发送电子邮件接收“原始”RFC822 有效负载消息字符串

仅使用访问令牌使用 Google API 发送电子邮件

可以通过 URL 从 Google 发送邮件吗?

尝试在 Java 中使用 Gmail API 发送电子邮件时出错