【问题标题】:How to get a Gmail user's profile picture using Google Apps Script?如何使用 Google Apps 脚本获取 Gmail 用户的个人资料图片?
【发布时间】:2021-11-01 12:29:04
【问题描述】:
我想在我们的域工作区中更新用户的电子邮件签名。我想使用用户的个人资料图片作为电子邮件签名的一部分。但是,我无法在电子邮件签名中呈现它。
一旦我查询了目标用户,到目前为止我所做的如下:
-
使用AdminDirectory.Users.Photos.get(email_address) 函数获取头像属性。使用这些属性创建一个编码图像 URL 以在 HTML img src 属性中显示它。所以,<img src="data:${userPhoto.mimeType};base64,${userPhoto.photoData}">。但是没有显示头像。
-
使用了getThumbnailPhotoUrl() 函数,但即使设置了个人资料图片,它也会呈现默认占位符图像。
我还为用于更新域中目标用户的服务凭据添加了范围:“https://www.googleapis.com/auth/admin.directory.user”。
还有其他方法可以做到吗?
【问题讨论】:
标签:
javascript
google-apps-script
gmail-api
【解决方案1】:
{
"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);
}