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

Posted

技术标签:

【中文标题】如何在 C# 中使用带有服务帐户的 gmail api 或 google Oauth 来发送邮件?【英文标题】:How to use gmail api with service accounts or google Oauth in C# for sending mails? 【发布时间】:2021-12-05 07:20:46 【问题描述】:

我可以在我的 asp.net 核心 Web 应用程序中针对“忘记密码”功能发送不回复邮件吗? 我无法在我的网络应用程序中使用 SMTP。我可以使用gmail api发送无回复邮件以发送忘记密码邮件吗? 服务帐户或 google oauth2.0 可以在这里提供帮助吗?

【问题讨论】:

你试过了吗?你遇到了什么问题? 【参考方案1】:

如果您有 google 工作区域帐户,则服务帐户只能由 gmail api 使用。

您需要为 Doman 上的用户设置域范围的 delegation,然后服务帐户将能够代表其发送电子邮件。我想在这种情况下创建一个名为 no-reply 的用户是一种选择。

代码是标准服务帐户授权代码,并添加了 gsuiteUser 以委托给。

        string ApplicationName = "Gmail API .NET Quickstart";
        const string serviceAccount = "XXXXX@XXXX-api.iam.gserviceaccount.com";

        var certificate = new X509Certificate2(@"c\XXXX-api-ed4859a67674.p12", "notasecret", X509KeyStorageFlags.Exportable);

        var gsuiteUser = "domainUser@XXXX.com";

        var serviceAccountCredentialInitializer = new ServiceAccountCredential.Initializer(serviceAccount)
        
            User = gsuiteUser,
            Scopes = new[]  GmailService.Scope.Gmail 

        .FromCertificate(certificate);

        var credential = new ServiceAccountCredential(serviceAccountCredentialInitializer);
        if (!credential.RequestAccessTokenAsync(CancellationToken.None).Result)
            throw new InvalidOperationException("Access token failed.");

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

应该在您的网站上创建 TBH 忘记密码功能。我会假设它有自己的域和邮件服务器。您应该使用它而不是 gmail api。

【讨论】:

以上是关于如何在 C# 中使用带有服务帐户的 gmail api 或 google Oauth 来发送邮件?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有服务帐户的 Gmail API 发送邮件

如何通过 Gmail 使用 C# 发送电子邮件

如何从企业帐户发送带有烧瓶邮件的电子邮件?

是否可以在 gmail.com 帐户中找到从 C# 以编程方式发送的电子邮件?

如何在没有用户交互的情况下使用 GMail API 创建草稿

从 C# 发送 html 电子邮件