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

如何通过Google Drive API PHP获取共享文件用户的邮箱地址

解决Google Drive API获取权限时emailAddress返回null的问题

咱们来一步步拆解你遇到的问题,主要有两个核心原因和对应的解决办法:

1. 未指定需要返回的字段

Google Drive API的listPermissions方法默认不会返回所有权限字段,emailAddress恰好不在默认返回的集合里。你需要显式通过fields参数指定要获取的信息,确保邮箱、角色这些字段被返回。

2. 权限类型本身不包含邮箱地址

不是所有权限类型都关联邮箱:

  • 只有user(个人用户)和group(群组)类型的权限会返回emailAddress
  • domain(域级权限)、anyone(任何人可访问)这类权限没有绑定具体邮箱,所以emailAddress自然是null

修改后的可运行代码示例

// 调用listPermissions时明确指定需要的字段
$permissions = $this->drive->permissions->listPermissions(
    $file->id,
    ['fields' => 'permissions(id,emailAddress,role,type)']
);

foreach ($permissions->getPermissions() as $permission) {
    $role = $permission->getRole();
    $type = $permission->getType();
    
    // 只处理有邮箱的权限类型
    if ($type === 'user' || $type === 'group') {
        $email = $permission->getEmailAddress();
        echo "邮箱地址: {$email}, 角色: {$role}\n";
    } else {
        // 处理无邮箱的权限场景
        echo "权限类型: {$type}, 角色: {$role}\n";
    }
}

额外注意点

  • 确认你的API服务账号权限足够:如果要访问共享给外部用户的文件,需要使用包含https://www.googleapis.com/auth/drive或https://www.googleapis.com/auth/drive.readonly的scope
  • 如果是团队盘(Shared Drive)文件,要确保服务账号已被授予团队盘的访问权限,否则可能无法获取完整权限信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:54