【问题标题】:How to get a Gmail user's profile picture using Google Apps Script?如何使用 Google Apps 脚本获取 Gmail 用户的个人资料图片?
【发布时间】:2021-11-01 12:29:04
【问题描述】:

我想在我们的域工作区中更新用户的电子邮件签名。我想使用用户的个人资料图片作为电子邮件签名的一部分。但是,我无法在电子邮件签名中呈现它。

一旦我查询了目标用户,到目前为止我所做的如下:

  1. 使用AdminDirectory.Users.Photos.get(email_address) 函数获取头像属性。使用这些属性创建一个编码图像 URL 以在 HTML img src 属性中显示它。所以,<img src="data:${userPhoto.mimeType};base64,${userPhoto.photoData}">。但是没有显示头像。

  2. 使用了getThumbnailPhotoUrl() 函数,但即使设置了个人资料图片,它也会呈现默认占位符图像。

我还为用于更新域中目标用户的服务凭据添加了范围:“https://www.googleapis.com/auth/admin.directory.user”。

还有其他方法可以做到吗?

【问题讨论】:

  • api 的响应是什么?

标签: javascript google-apps-script gmail-api


【解决方案1】:

users.photos.get 应该会返回以下响应:

{
  "kind": "admin#directory#user#photo",
  "id": "112573616946026931368",
  "etag": "\"-vDsmNkFadksL3sdO9_llNHf95VVWFrsahpYPMFRU6U/X6ZsLw-qrvYjOu4FN-GLlBCL-ts\"",
  "primaryEmail": "EMAIL",
  "mimeType": "image/jpeg",
  "height": 96,
  "width": 96,
  "photoData": "photoDataString"
}

其中photoData定义如下:

字符串(字节格式)

用户照片上传的网络安全 Base64 格式的数据,以字节为单位。这意味着:

斜线 (/) 字符替换为下划线 (_) 字符。 加号 (+) 字符将替换为连字符 (-) 字符。 等号 (=) 字符将替换为星号 (*)。 对于填充,使用句点 (.) 字符代替使用等号 (=) 进行填充的 RFC-4648 baseURL 定义。这样做是为了简化 URL 解析。 无论上传的照片大小如何,API 都会将其缩小到 96x96 像素。 一个 base64 编码的字符串。

现在,您可以将照片 blob 检索到例如将其存储在您的云端硬盘中,如下所示:

function saveUserPhoto() {
  var data = "photoDataString"
  var bytes = Utilities.base64DecodeWebSafe(data)
  var blob = Utilities.newBlob(bytes, "image/png", "userPhoto");
  DriveApp.createFile(blob);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多