如何使用Google Apps Script获取Gmail用户的个人资料图片?



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

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

  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'。

还有其他方法吗?

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定义如下:

string (bytes format)

用户照片的上传数据以web安全的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);
}

最新更新