如何在 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.com 帐户中找到从 C# 以编程方式发送的电子邮件?