You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过无人值守的REST服务安全使用Gmail账户发送邮件?

无人值守REST服务通过Google SMTP发邮件的安全实现方案

问题根源

你碰到的「Access blocked」错误,是因为误用了需要用户手动授权的OAuth2授权码流程——这个流程依赖浏览器交互,完全不适合无人值守的后台服务。针对服务器端无交互场景,Google提供了两种合规方案,下面具体说明:

方案1:服务账号+域范围委派(企业G Suite/Workspace账户首选)

这是Google官方推荐的企业级无交互认证方案,步骤如下:

  1. 登录Google Cloud控制台,创建服务账号并下载JSON格式的密钥文件。
  2. 登录Google Workspace管理后台,给该服务账号开启域范围委派,并添加https://mail.google.com/的API权限。
  3. 在代码中加载服务账号密钥,模拟你的Workspace域内的目标邮箱账户生成OAuth2令牌,再通过MailKit完成SMTP认证发送。

C#示例代码:

// 加载服务账号密钥
var credential = GoogleCredential.FromFile("your-service-account-key.json")
    .CreateScoped(new[] { "https://mail.google.com/" })
    .CreateWithUser("sender@your-domain.com"); // 指定要模拟的发件人邮箱

// 构建OAuth2认证机制
var oauth2 = new SaslMechanismOAuth2(credential.UserId, await credential.GetAccessTokenForRequestAsync());

// 发送邮件
using (var client = new SmtpClient())
{
    client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
    client.Authenticate(oauth2);
    client.Send(yourMimeMessage);
    client.Disconnect(true);
}

方案2:应用专用密码(个人账户,需开启2FA)

如果是个人Google账户且已经开启两步验证,可以生成应用专用密码替代原密码:

  1. 登录Google账户安全设置,找到「应用专用密码」选项。
  2. 生成一个专用密码(注意只显示一次,务必保存)。
  3. 直接用这个密码作为SMTP的登录密码,结合你的邮箱地址进行Basic认证,无需OAuth2。

⚠️ 注意:未开启2FA的个人账户无法使用此方案,且这是个人账户的临时替代方案,企业场景优先选服务账号。

方案3:Google Workspace SMTP Relay(批量发送场景)

如果需要批量发送邮件,可配置Google Workspace的SMTP Relay服务:

  1. 在Workspace管理后台设置SMTP Relay,将你的服务器IP加入白名单。
  2. 直接通过该IP连接SMTP服务器,无需用户名密码(基于IP认证),或使用Workspace账户凭据认证。

重要提醒

  • 「Less secure apps」设置已被Google彻底移除,不要再尝试寻找相关选项。
  • 服务账号的域范围委派仅对Workspace/G Suite账户开放,个人账户无法使用。
  • 所有方案必须确保密钥/密码的安全存储,避免硬编码在代码中。

内容的提问来源于stack exchange,提问作者AxD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:07:06