使用Strapi配置strapi-provider-email-gmail-2lo发邮件失败如何解决?
Strapi使用gmail-2lo插件发送邮件失败排查方案
1. 基础依赖与版本校验
- 确认你的Strapi版本为v4,
strapi-provider-email-gmail-2lo插件仅适配Strapi v4,v3版本无法兼容 - 执行
npm list strapi-provider-email-gmail-2lo检查插件是否安装成功,无返回版本信息则删除node_modules、package-lock.json后重新执行npm i strapi-provider-email-gmail-2lo安装
2. 配置文件正确性校验
- 确认
plugins.js文件存放路径为项目根目录下的/config/plugins.js,路径错误会导致配置不生效 - 检查配置项是否完整无缺失:
provider字段需填写为gmail-2lo,拼写错误会导致插件无法被识别providerOptions下必填的client_email(GCP服务账号邮箱)、private_key(服务账号私钥)、userId(发件人邮箱,为Google Workspace域内真实账号)是否填写正确private_key需完整复制服务账号JSON文件中的私钥内容,包含头尾的-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----\n,不得遗漏转义字符\n或多余空格、引号defaultFrom、defaultReplyTo需和userId为同域账号,否则会被Gmail接口拦截
- 若使用
.env存储敏感配置,检查环境变量名拼写是否正确,调用时是否添加process.env.前缀
3. Google端权限配置校验
注:该插件仅支持Google Workspace(原G Suite)企业域账号,个人Gmail账号无法使用2LO模式发信
- 确认GCP控制台中已启用Gmail API,未启用的话会直接返回接口无权限报错
- 确认GCP服务账号已开启「全域委托(Domain-wide Delegation)」权限,未开启则无法模拟域内用户发信
- 确认Google Workspace管理后台已给该服务账号授权
https://www.googleapis.com/auth/gmail.send权限,权限范围配置错误会导致发信被拒 - 确认
userId对应的邮箱是Google Workspace域内真实存在、状态正常的账号,不能直接填写服务账号邮箱
4. 调试排查
可以编写自定义测试接口直接调用邮件服务,获取更详细的报错信息:
// 示例测试接口代码 module.exports = { async testEmail(ctx) { try { await strapi.plugin('email').service('email').send({ to: '接收邮箱地址', subject: '测试邮件', text: '这是一封测试邮件' }); ctx.body = '邮件发送成功'; } catch (err) { ctx.body = err; console.error('邮件发送报错详情:', err); } } }
根据返回的报错信息定向排查:
- 若返回授权相关错误,优先检查Google端的API启用、权限委托、scope配置
- 若返回配置格式错误,优先检查
plugins.js的配置项拼写、私钥完整性
内容的提问来源于stack exchange,提问作者tulip
相关产品推荐
相关产品推荐

