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

基于AWS SES的Node.js应用本地正常发信,Lambda部署后无法发送

解决AWS Lambda部署后无法通过SES发送邮件的问题

1. 修复sendMail函数的Promise返回问题

当前sendMail函数为async类型,但内部未返回邮件发送的Promise,导致await sendMail调用时无法等待发送流程完成,Lambda会提前终止执行。修改代码如下:

const sendMail = async (params) => {
    const { toAddress, baseUrl, dealId, applicantName, dealType, appLogo } = params;
    const url = `${baseUrl}/personalInfo/${dealId}`;
    const jsonParameters = {
        "user": applicantName,
        "image": appLogo,
        "dealType": dealType,
        "link": url
    };
    const jsonPayload = JSON.stringify(jsonParameters);

    var emailParams = {
        Destination: { 
            ToAddresses: [toAddress]
        },
        Source: "info_some_random_app@gmail.com", 
        Template: 'MyTemplate', 
        TemplateData: jsonPayload
    };

    try {
        // 直接返回Promise,让await等待执行结果
        return new aws.SES({apiVersion: '2010-12-01'}).sendTemplatedEmail(emailParams).promise();
    } catch (error) {
        throw error; // 修正之前错误抛出express实例的问题
    }
};

2. 对齐Lambda与本地Node.js版本

CloudWatch日志显示Lambda使用Node.js 14运行时,但本地开发版本为v18.12.1,版本差异可能导致依赖或SDK行为不一致。在Serverless配置文件(serverless.yml)中指定运行时:

provider:
  name: aws
  runtime: nodejs18.x
  region: ap-northeast-1

3. 给Lambda执行角色添加SES权限

Lambda的IAM执行角色需要具备ses:SendTemplatedEmail权限才能调用SES API,在Serverless配置中添加权限声明:

provider:
  # 其他已有配置...
  iamRoleStatements:
    - Effect: Allow
      Action:
        - ses:SendTemplatedEmail
      Resource: "*" # 建议限定到目标SES模板ARN以提升安全性

4. 修复接口错误处理的变量问题

/sendmail接口的catch块中存在变量名错误,修改后确保返回正确的错误信息:

app.post('/sendmail',async(req,res)=>{
  try{
     let mailResponse = await sendMail(req.body);
     res.status(200).json({mailStatus: mailResponse})
  }
  catch(err){
   res.status(500).json({error: err.message}); // 修正变量名并返回标准错误响应
  }
})

5. 验证SES模板有效性

确认SES控制台中MyTemplate模板已创建且状态正常,模板内的变量与代码中jsonParameters的字段完全匹配,避免因模板不存在或变量不匹配导致发送失败。

内容的提问来源于stack exchange,提问作者Raymond Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:01:44