如何通过Google Apps Script获取Gmail用户头像用于企业域邮箱签名
问题根因说明
- base64嵌入图片的方案本身不适用于邮箱场景:包括Gmail在内的绝大多数主流邮箱服务都会主动过滤HTML内容中的base64 Data URI,避免安全风险和内容膨胀,所以不管你生成的base64编码是否正确,放到邮箱签名里都会被剥离,自然无法显示。
getThumbnailPhotoUrl()返回默认占位图的核心原因有两个:- 你当前配置的权限范围不全,仅
https://www.googleapis.com/auth/admin.directory.user不包含用户头像的只读权限,需要额外补充https://www.googleapis.com/auth/admin.directory.user.photo.readonly权限,补充后需要重新为服务账号配置全域委派权限才会生效。 - 若用户设置了个人头像仅对域内可见,服务账号直接调用该接口会因为没有权限获取非公开头像,返回默认占位资源。
- 你当前配置的权限范围不全,仅
可行落地方案
- 方案一(仅域内通信场景适用):直接构造固定格式的域内可访问头像链接
你可以先调用AdminDirectory.Users.get()接口获取目标用户的唯一IDid字段,然后构造链接格式为https://lh3.googleusercontent.com/a/${用户ID}=s120,其中s120对应头像的像素尺寸,可根据你的签名设计调整,这个链接在域内环境下可以正常加载,不会被Gmail拦截。 - 方案二(内外通信都适用,兼容性最优):转存头像到自有公共存储
你调用AdminDirectory.Users.Photos.get()拿到头像的base64编码后,把图片转存到你企业自有的公共CDN或者可公开访问的存储服务中,拿到标准的HTTPS链接后放到<img>标签的src属性中即可,这个方案几乎兼容所有邮箱客户端,不会被过滤。
注意事项
- 如果你是通过Gmail API更新用户签名,需要额外为服务账号添加
https://www.googleapis.com/auth/gmail.settings.basic权限,调用时需要模拟目标用户身份发起请求,否则无法修改用户的邮箱设置。 - 签名中的
<img>标签建议明确设置width和height属性,避免不同邮箱客户端自动拉伸导致样式错乱。
内容的提问来源于stack exchange,提问作者Carmad94
相关产品推荐
相关产品推荐

