我想在我们的域工作区中更新一个用户的电子邮件签名。我想使用用户的个人资料图片作为电子邮件签名的一部分。但是,我无法在电子邮件签名中呈现它。
一旦我查询了目标用户,到目前为止我所做的是:
-
使用
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'。
还有其他方法吗?
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);
}