You need to enable JavaScript to run this app. 使用Gmail API创建草稿设置其他收件人返回Delegation denied错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Gmail API创建草稿设置其他收件人返回Delegation denied错误如何解决

问题原因

该Delegation denied403权限错误和收件人设置本身无关,核心是你调用Gmail API时的操作身份与目标操作资源不匹配,触发了跨账号操作的权限校验,常见诱因有3个:

  1. 调用users.drafts.create接口时,userId参数误填为收件人邮箱,而非生成凭证的自有授权邮箱,系统判定你试图越权操作他人邮箱
  2. MimeMessage发件人设置错误,你代码中message.setFrom(message.sender)的写法存在逻辑问题:刚初始化的MimeMessage的sender属性为null,相当于未明确指定发件人,系统误判你要以收件人身份创建草稿,触发委托权限校验
  3. 如果你使用服务账号鉴权,未开启Gmail API全域委托,也没有指定要模拟的授权用户邮箱,也会触发该错误
修复步骤
  • 修正MimeMessage发件人配置,将发件人明确设置为你生成凭证的自有授权邮箱:
val props = Properties()
val session = Session.getDefaultInstance(props, null)
val message = MimeMessage(session)
// 替换为你的授权邮箱地址,不要使用message.sender
message.setFrom(InternetAddress("my.email.here@gmail.com"))
message.addRecipient(JavaxMessage.RecipientType.TO, InternetAddress("different.email.here@gmail.com"))
message.subject = subject
  • 检查草稿创建接口的userId参数,必须固定填me(代指当前授权身份)或者你的授权邮箱地址,不要填写收件人邮箱:
// 示例调用逻辑,核心注意第一个参数为"me"
val draftContent = Draft().setMessage(Message().setRaw(encodeMimeMessageToBase64(message)))
val result = gmailService.users().drafts().create("me", draftContent).execute()
  • 若使用服务账号鉴权,需要额外完成两个配置:在Google Workspace管理后台为该服务账号开启Gmail API的全域委托权限;初始化Gmail客户端时明确指定要模拟的用户为你的授权自有邮箱。
  • 如果你近期调整过API权限范围,需要重新走OAuth授权流程,获取新的访问令牌,旧令牌会保留之前的权限配置不会自动更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:21:04