You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strapi联系表单无法触发SendGrid邮件问题求助

Strapi + SendGrid:联系表单新增条目时邮件服务未触发的排查与解决

核心问题诊断

你的代码和配置存在几个关键问题,导致邮件服务未触发:

  1. 生命周期文件位置/命名不符合Strapi v4规范
  2. 钩子注册方式为旧版本语法,Strapi v4不兼容
  3. Email服务获取时机错误(文件顶部过早调用,Strapi未完成初始化)
  4. 环境变量调用方式不正确
  5. 缺少错误捕获,无法排查静默失败

分步解决方案

1. 修正生命周期文件路径与结构

Strapi v4要求生命周期文件必须放在对应内容类型的目录下,正确路径为:
src/api/contact-us-query/content-types/contact-us-query/lifecycles.js

2. 使用Strapi v4标准生命周期语法

放弃旧版strapi.hooks.addHook写法,直接导出包含生命周期函数的对象:

module.exports = {
  async afterCreate(event) {
    // 邮件发送逻辑写在这里
  }
};

3. 正确获取Email服务并调用

在生命周期函数内部获取邮件服务(避免文件顶部过早调用导致Strapi未初始化完成),同时修正服务调用语法。

4. 修正环境变量调用方式

Strapi v4中直接使用process.env访问环境变量,无需额外封装。

5. 添加错误捕获与日志

增加异常捕获代码,打印日志便于排查问题。


完整修正代码

module.exports = {
  async afterCreate(event) {
    try {
      const query = event.result;
      // 在生命周期函数内部获取邮件服务,确保Strapi已完成初始化
      const emailService = strapi.plugin('email').service('email');

      const emailOptions = {
        to: process.env.RECIEVER_EMAIL,
        from: process.env.SENDGRID_EMAIL,
        subject: 'New contact us query',
        text: `You have received a new contact us query from ${query.name} (${query.email}). Their message is: ${query.message}`,
      };

      await emailService.send(emailOptions);
      strapi.log.info('Contact us email sent successfully');
    } catch (error) {
      strapi.log.error('Failed to send contact us email:', error);
      throw error; // 可选:抛出错误让Strapi捕获,便于调试
    }
  },
};

额外排查要点

  • 验证集合类型UID:进入Strapi后台【Content Manager】→ 点击contact-us-query集合的「设置」,确认UID为api::contact-us-query.contact-us-query,确保生命周期文件对应正确的内容类型。
  • 检查环境变量:在代码中临时添加console.log(process.env.RECIEVER_EMAIL, process.env.SENDGRID_EMAIL),确认变量已正确加载。
  • 查看Strapi日志:运行Strapi时观察终端输出,若有错误信息可直接定位问题。
  • SendGrid权限验证:确认SendGrid API Key拥有发送邮件权限,且发件邮箱已完成域名/邮箱验证。

内容的提问来源于stack exchange,提问作者Zeed Tanue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:33:17