【发布时间】:2019-06-24 15:11:55
【问题描述】:
我有一个使用 Gmail API 的 Java 程序,它通过 OAuth 2.0 向我们的 G Suite 进行身份验证,下载特定用户收件箱中邮件的所有附件,并处理所述附件。
我遇到了一个非常具体的问题,对于从某些传真服务器发送并转发到帐户的某些消息,其中“收件人:”字段使用
发送给帐户本身以外的其他内容service.users().messages().get(userID, messageID).execute();
不会检索这些附件。如果我使用通用的“我”标识符,这甚至是正确的。
如果我将消息转发给自己并且“收件人:”字段发生更改,则程序能够接收它,但如果它是发送给其他人的,则不能。这是一个问题,因为这些邮件被发送到我们 G Suite 域之外的电子邮件。我已经尝试过所有在 Gmail 中转发和过滤的方法,包括转发到 Yahoo 等其他提供商,但自动转发不会更改原始电子邮件中的“to:”/deliveredto: 字段,因此会导致同样的问题。
我尝试使用不同的身份验证方法,我尝试使用服务帐户进行具有完整 Gmail 范围的域范围委派,如此处引用的 Gmail API domain-wide delegation 并遵循 Google 文档概述的确切步骤。
问题是,即使我使用域范围的委派并将 setServiceAccountUser 指定为“to:”字段中的传真用户,它仍表示该用户不是有效用户,这是有道理的,因为这不是 Gmail 用户或我们域内的用户,它是从我们无法控制的外部来源转发的。
我尝试构建一个程序,将这些电子邮件手动转发回此平台帐户,但我遇到了与 service.users().messages().get(userID, messageID) 方法需要用户 ID 相同的问题和 messageID。
Message message = service.users().messages().get("xxxxxxxxx@faxmail.vonage.com", messageID).execute();
上面是我隔离的代码部分,其中 .get() 方法不允许程序获取此外部用户的附件,这似乎是由电子邮件中的“to:”字段直接定义的 -如果我将这封电子邮件转发给自己并将“收件人:”更改为我的用户,它会立即获取附件。
当我尝试使用服务帐户进行域范围委派或将详细方法中的用户 ID 更改为传真邮件.vonage.com 地址时,它会给我一个 403 或 400 错误 - 要么抱怨用户不存在,或说“平台@xxxxxx.com 的委托被拒绝”
【问题讨论】:
标签: java oauth-2.0 google-api gmail-api