c# - 如何在没有浏览器弹出窗口的情况下使用 OAuth2 发送 GMail/GSuite 电子邮件?

标签 c# oauth-2.0 mailkit google-email-settings-api

正在关注 this github article我能够使用 OAuth2 对 GMail 进行身份验证,并以编程方式使用 SMTP 和 IMAP(来自 MailKit 的客户端)发送 gmail 消息。该链接由作者 (jstedfast) 友情提供。该方法的问题在于它会打开浏览器弹出窗口并要求用户进行身份验证,至少时不时如此。也许这是因为该方法使用“用户 secret ”而不是服务帐户和私钥/公钥,但我不确定。

我需要从服务器类型的应用程序发送一封电子邮件,其中没有用户手动插入进程。到目前为止,该应用程序正在使用标准的 SMTP 身份验证,但这需要 GMail/GSuite 帐户启用“不太安全”设置,而客户不希望这样。

有一个very old post (同样由 jstedfast 提供)展示了如何使用服务帐户和公钥/私钥通过 OAuth2 对电子邮件客户端进行身份验证。我完全遵循了那篇文章(除了我使用 json 打包证书而不是 p12 并且使用 GMail 而不是 GSuite 电子邮件)但结果是否定的。即,当我尝试执行 client.Authenticate(accessToken) 时,响应是读取 {"status":"400", "schemes":"Bearer", "scope": "https://mail.google.com/”

我可以访问 GSuite,并且不介意在必要时使用它,但是我没有找到明确的说明和可行的示例。任何人都可以指出通过私钥/公钥加密使用 OAuth2 进行身份验证并且不需要用户交互的 C# 示例吗?

最佳答案

这可以通过 Web 应用类型 OAuth 客户端 ID 和手动创建的刷新 token 实现。
如何创建正确的 OAuth 客户端 ID 并获取刷新 token :https://stackoverflow.com/a/24123550/6075536
那么如何使用 MailKit 发送电子邮件:https://stackoverflow.com/a/52413127/6075536

记住Refresh token expiration rules .

关于c# - 如何在没有浏览器弹出窗口的情况下使用 OAuth2 发送 GMail/GSuite 电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63973845/

相关文章:

c# - 使用 MailKit/MimeKit 从电子邮件中删除附件

c# - HttpClient 设置边界与内容类型

javascript - 尝试使用 cors 获取请求的资源上不存在 'Access-Control-Allow-Origin' header 来访问 google contacts api

c# - 通过 C++ 包装器从 java 调用 c# dll 时出错

spring-boot - 微服务之间的认证 : Amazon API Gateway

java - 记住桌面应用程序中 Google Drive API 的最后一个 oAuth2 session

oauth-2.0 - 如何使用 MailKit 中的 OAuth 2.0 连接到 Exchange Online?

email - 使用 SMTP 时,X-Priority 与 Priority header 有什么区别?

c# - 只读集合 IEnumerable

c# - 压缩 Web 服务请求