使用 OAuth2 在 C# 中通过 IMAP 访问 Gmail

本文着重于通过使用 IMAP 客户端与 Gmail 进行交互,这是一种广泛使用的电子邮件服务。它涵盖了通过 OAuth 2.0 验证用户的必要步骤,从而使安全访问 Gmail 帐户成为可能。它还解释了如何从 Google Cloud Console 获取必要的凭据、检索访问令牌以及使用 C# 和 .NET API 连接到 Gmail。在本指南结束时,您将获得以编程方式管理电子邮件消息的技能,使应用程序能够与 Gmail 进行交互。这些技术对于构建电子邮件客户端或自动化任务、增强开发工作非常有用。

.NET 库通过 IMAP 访问 Gmail

Aspose.Email for .NET 通过提供强大、现成的类和方法与 Gmail 的 IMAP 服务器进行交互,简化了使用 OAuth 2.0 身份验证通过 IMAP 访问 Gmail 的过程。它是一个旨在处理 .NET 应用程序中各种与电子邮件相关任务的库。它支持包括 IMAP、POP3 和 SMTP 在内的常见电子邮件协议,使其成为开发电子邮件功能的开发者的重要工具。

使用 Aspose.Email,您可以安全地连接到 Gmail 帐户,检索消息,并管理邮箱数据,而无需担心协议实现的复杂性。该库抽象了许多低级细节,使开发者能够专注于编写干净、功能性的电子邮件管理代码,无论是用于电子邮件客户端、自动化还是后端服务。

要利用该库的强大功能,只需使用 NuGet 包管理器安装它并将其集成到您的项目中:

  • 在 Visual Studio 中打开您的项目。
  • 导航到工具 > NuGet 包管理器 > 管理解决方案的 NuGet 包。
  • 搜索 Aspose.Email
  • 选择包并单击安装。

另外,您也可以使用包管理器控制台并输入以下命令:

Install-Package Aspose.Email

您还可以直接从 Aspose 网站下载 最新版本的 API。

一旦库安装完成,就可以开始编码了!

在 Google Cloud Console 中获取 OAuth 的客户端 ID 和客户端密钥

由于 Gmail 不再支持直接的登录和密码身份验证,您需要使用 OAuth 2.0 进行连接。 OAuth 2.0 提供了强大的授权框架,使应用程序能够安全地访问用户数据,而不暴露敏感凭据。

以下步骤将指导您如何从 Google Cloud Console 获取用于通过 IMAP 连接邮箱的客户端 ID 和客户端密钥。

  1. 访问 Google Cloud Console

首先,导航到 Google Cloud Console 并使用您的 Google 账户登录。该平台允许您管理和配置项目的 Google 服务。

  1. 创建新项目
  • 单击页面顶部的项目下拉菜单。
  • 选择“新项目”。
  • 输入项目的描述性名称,并在需要时选择计费账户。
  • 单击“创建”以完成新项目的创建。
  1. 启用 Gmail API 以访问数据
  • 在左侧导航窗格中,单击“APIs & Services”,然后单击“Library”。
  • 搜索“Gmail API”。
  • 单击 API 条目并点击“启用”。
  1. 设置 OAuth 同意屏幕
  • 导航到“APIs & Services”,然后选择“OAuth 同意屏幕”。
  • 根据您的用户基础选择“外部”或“内部”。
  • 填写必要字段,如应用名称和用户支持电子邮件。
  • 单击“保存并继续”以继续。
  1. 创建凭据

凭据对于您的应用程序与 Google 服务之间的安全通信至关重要。

  • 转到“APIs & Services”并选择“Credentials”。
  • 单击“+ 创建凭据”并选择“OAuth 2.0 Client IDs”。
  1. 配置您的 OAuth 2.0 客户端 ID
  • 选择“桌面应用”作为应用程序类型。
  • 命名您的 OAuth 2.0 客户端。
  • 添加授权重定向 URI,例如 http://localhost 用于本地测试。
  • 单击“创建”以生成凭据。
  1. 检索客户端 ID 和客户端密钥

创建凭据后,您将看到一个对话框,显示您的 Client IDClient Secret。通过单击下载按钮下载包含凭据的 JSON 格式文件。

  1. 配置范围
  • 返回到“OAuth 同意屏幕”。
  • 单击“添加或删除范围”,选择“https://mail.google.com/”权限以通过 IMAP 访问邮箱数据。

您现在已经成功获取了 Google Cloud Console 中 OAuth 的客户端 ID 和客户端密钥。这些凭据将允许您验证用户并通过 IMAP 使用 IMAP 客户端应用程序安全地连接到他们的邮箱。

获取 Gmail API 的访问令牌

访问令牌对于对 API(如 Gmail API)进行身份验证请求至关重要。本节将解释如何获取访问令牌。我们将通过一个代码示例演示获取访问令牌以与 Gmail 数据交互的过程。

在您开始之前,请确保您已:

  • 一个启用了 Gmail API 的 Google Cloud 项目。
  • 从 Google Cloud Console 下载的 OAuth 2.0 凭据(JSON 文件)。
  • 在您的 C# 项目中安装了 Google.Apis.Auth 库。您可以通过 NuGet 安装:
Install-Package Google.Apis.Auth

要以编程方式获取令牌,我们将采取以下操作:

  1. 导入必要的命名空间 Google.Apis.Auth.OAuth2 以使用 Google 的身份验证功能。
  2. 创建一个静态异步的 GetAccessToken 方法,该方法将接受一个参数,即包含 OAuth 2.0 凭据的 JSON 文件的路径。

获取 GetAccessToken 方法将包括以下步骤:

  1. 定义 Gmail API 所需的范围。在我们的例子中,我们请求访问用户的 Gmail 帐户。
  2. 使用 GoogleClientSecrets.FromFile 方法从指定的 JSON 文件加载 OAuth 2.0 客户端机密。
  3. 使用 GoogleWebAuthorizationBroker.AuthorizeAsync 方法启动授权过程。该方法将提示用户进行身份验证并授权访问。

一旦授权成功,访问令牌将被返回,使您能够对 Gmail API 发出经过身份验证的请求。

以下是获取访问令牌的代码示例:

using Google.Apis.Auth.OAuth2;
static async Task<string> GetAccessToken(string pathToAccessParameters)
{
// Gmail API scope
string[] scopes = { "https://mail.google.com/" };
// Use the JSON file with OAuth 2.0 credentials
var clientSecrets = GoogleClientSecrets.FromFile(pathToAccessParameters).Secrets;
// Acquire tokens
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
clientSecrets,
scopes,
"username (e.g. username@gmail.com)",
CancellationToken.None);
return credential.Token.AccessToken;
}

您已经成功实现了一个方法,以使用 C# 中的 OAuth 2.0 获取 Gmail API 的访问令牌。该访问令牌使您的应用程序能够代表用户执行授权操作。请记得安全地处理访问令牌,并根据需要刷新它以保持用户访问。

通过 IMAP 连接到 Gmail

本节将指导您如何使用 Aspose.Email for .NET 连接到 Gmail。我们将考虑建立安全连接并从 Gmail 帐户检索电子邮件消息所需的代码。

在您开始之前,请确保您有获取访问令牌以进行身份验证的方法,如前一节所述。

作为示例,我们将创建一个 IMAP 客户端,使用必要的参数并列出“收件箱”文件夹中的消息:

  1. 调用 GetAccessToken 方法,传入 OAuth 2.0 凭据文件的路径。此方法返回用于身份验证所需的访问令牌。

  2. 使用参数创建 ImapClient 的实例。

    Host: "imap.gmail.com" 指定 Gmail 的 IMAP 服务器。

    Port: 993 是 IMAP 通过 SSL 的安全端口。

    Username: 您的 Gmail 电子邮件地址。

    Access Token: 从 GetAccessToken 方法检索到的访问令牌。

    Use OAuth: true 参数指示使用 OAuth 进行连接。

    Security Options: SecurityOptions.SSLAuto 确保自动 SSL 协商。

  3. 调用 SelectFolderAsync 方法以指定要访问的邮箱文件夹——在我们的例子中,是收件箱。

  4. 调用 ListMessages 方法从选定的文件夹中检索电子邮件消息列表。我们输出检索到的消息数量,并遍历每条消息以打印主题行。

以下是使用 C# 通过 IMAP 连接到 Gmail 的代码:

using Aspose.Email.Clients;
using Aspose.Email.Clients.Base;
using Aspose.Email.Clients.Imap;
var accessToken =
await GetAccessToken(
"googleusercontent.com.json");
// Connect to Gmail IMAP with OAuth
using var client = new ImapClient("imap.gmail.com", 993, "dmitbox@gmail.com", accessToken, true, SecurityOptions.SSLAuto);
// Select the Inbox folder
await client.SelectFolderAsync(ImapFolderInfo.InBox);
// Retrieve messages
var messages = client.ListMessages();
Console.WriteLine($"Number of messages: {messages.Count}");
foreach (var message in messages)
{
Console.WriteLine(message.Subject);
}

您现在已成功使用 C# 和 Aspose.Email .NET 通过 IMAP 连接到 Gmail。

当然,上述示例中使用的 ImapClient 方法只是其中的一部分。Aspose.Email 涵盖了 IMAP 协议在客户端的几乎所有功能。这包括文件夹管理、消息检索和附件处理等功能。此外,它还支持高级操作,例如搜索和过滤消息。

结论

在本文中,我们探讨了如何通过使用 C# 的 IMAP 协议与 Gmail 进行交互的技术。我们介绍了如何从 Google Cloud Console 获取 OAuth 2.0 凭据、检索访问令牌,以及如何安全地连接到 Gmail 以管理电子邮件。

通过利用提供的代码示例,您可以将 Gmail 功能集成到您的应用程序中,从而高效地检索和管理电子邮件。

这些代码示例由先进且强大的 Aspose.Email for .NET 库提供,该库还提供了一些免费的资源:

  • 一份全面的 文档
  • 一份广泛的 API 参考
  • 各种免费的在线工具和 应用 来增强开发过程,
  • 免费的 支持论坛 供社区协助和见解,
  • 博客 以保持对最新提示和教程的更新。

这些资源对于最大限度地发挥库在您项目中的潜力是非常宝贵的。

另请参阅